示例#1
0
 /**
  * Gets all of the attachments for the given statements.
  * @param [\stdClass] $statements
  * @param IndexOptions $opts
  * @return [\stdClass]
  */
 public function index(array $statements, IndexOptions $opts)
 {
     $dir = $this->getDir($opts);
     $attachments = [];
     foreach ($statements as $statement) {
         $attachments = array_merge($attachments, array_map(function ($attachment) use($dir) {
             $ext = $this->getExt($attachment->contentType);
             $filename = $attachment->sha2 . '.' . $ext;
             return (object) ['content_type' => $attachment->contentType, 'hash' => $attachment->sha2, 'content' => FileFactory::create()->stream($dir . $filename, [])];
         }, isset($statement->attachments) ? $statement->attachments : []));
     }
     return $attachments;
 }
 /**
  * Generates content response.
  * @param mixed $data used to select the Document.
  * @return Response
  */
 public function documentResponse($data)
 {
     $document = $this->document->find($this->getOptions(), $this->document_type, $data);
     if (!$document) {
         throw new Exceptions\NotFound($data[$this->identifier], $this->document_type);
     } else {
         $headers = ['Updated' => $document->updated_at->toISO8601String(), 'Content-Type' => $document->contentType, 'ETag' => '"' . $document->sha . '"'];
         if ($this->method === 'HEAD') {
             //Only return headers
             return \Response::make(null, 200, $headers);
         } else {
             switch ($document->contentType) {
                 case "application/json":
                     return \Response::json($document->content, 200, $headers);
                 case "text/plain":
                     return \Response::make($document->content, 200, $headers);
                 default:
                     $stream = FileFactory::create()->stream($document->getFilePath(), []);
                     return \Response::stream(function () use($stream) {
                         while (!feof($stream)) {
                             echo fread($stream, 8192);
                             flush();
                             ob_flush();
                         }
                         fclose($stream);
                     }, 200, $headers);
             }
         }
     }
 }
示例#3
0
 private function saveDocument($content, $contentType)
 {
     $dir = $this->getContentDir();
     if ($content instanceof UploadedFile) {
         $origname = $content->getClientOriginalName();
         $parts = pathinfo($origname);
         $filename = Str::slug(Str::lower($parts['filename'])) . '-' . time() . '.' . $parts['extension'];
         // Stores the file in a temporary location before writing it to the FileRepository.
         $tmp_location = __DIR__ . '/../../uploads/tmp';
         $content->move($tmp_location, $filename);
         $data = file_get_contents($tmp_location . '/' . $filename);
         FileFactory::create()->update($dir . $filename, ['content' => $data], []);
         unlink($tmp_location . '/' . $filename);
     } else {
         $ext = array_search($contentType, FileTypes::getMap());
         $filename = time() . '_' . mt_rand(0, 1000) . ($ext !== false ? '.' . $ext : '');
         $size = FileFactory::create()->update($dir . $filename, ['content' => $content], []);
         if ($size === false) {
             throw new Exceptions\Exception('There was an issue saving the content');
         }
     }
     $this->content = $filename;
     $this->setSha($content);
 }