예제 #1
0
 /**
  * Create new genesis document
  * @param File $file 
  * */
 public function __construct(File $file)
 {
     $view = $file->getOwnerView();
     $path = $file->getPath();
     $owner = $file->getOwner();
     $this->view = new View('/' . $owner);
     if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)) {
         $this->view->mkdir(self::DOCUMENTS_DIRNAME);
     }
     $this->validate($view, $path);
     $this->hash = $view->hash('sha1', $path, false);
     $this->path = self::DOCUMENTS_DIRNAME . '/' . $this->hash . '.odt';
     if (!$this->view->file_exists($this->path)) {
         //copy new genesis to /user/documents/{hash}.odt
         // get decrypted content
         $content = $view->file_get_contents($path);
         $mimetype = $view->getMimeType($path);
         $data = Filter::read($content, $mimetype);
         $this->view->file_put_contents($this->path, $data['content']);
     }
     try {
         $this->validate($this->view, $this->path);
     } catch (\Exception $e) {
         throw new \Exception('Failed to copy genesis');
     }
 }
 public function render()
 {
     if ($this->getStatus() === Http::STATUS_NOT_FOUND) {
         return '';
     }
     $info = $this->view->getFileInfo($this->path);
     $this->ETag = $info['etag'];
     $content = $this->view->file_get_contents($this->path);
     $data = \OCA\Documents\Filter::read($content, $info['mimetype']);
     $size = strlen($data['content']);
     if (isset($this->request->server['HTTP_RANGE']) && !is_null($this->request->server['HTTP_RANGE'])) {
         $isValidRange = preg_match('/^bytes=\\d*-\\d*(,\\d*-\\d*)*$/', $this->request->server['HTTP_RANGE']);
         if (!$isValidRange) {
             return $this->sendRangeNotSatisfiable($size);
         }
         $ranges = explode(',', substr($this->request->server['HTTP_RANGE'], 6));
         foreach ($ranges as $range) {
             $parts = explode('-', $range);
             if ($parts[0] === '' && $parts[1] == '') {
                 $this->sendNotSatisfiable($size);
             }
             if ($parts[0] === '') {
                 $start = $size - $parts[1];
                 $end = $size - 1;
             } else {
                 $start = $parts[0];
                 $end = $parts[1] === '' ? $size - 1 : $parts[1];
             }
             if ($start > $end) {
                 $this->sendNotSatisfiable($size);
             }
             $buffer = substr($data['content'], $start, $end - $start);
             $md5Sum = md5($buffer);
             // send the headers and data
             $this->addHeader('Content-Length', $end - $start);
             $this->addHeader('Content-md5', $md5Sum);
             $this->addHeader('Accept-Ranges', 'bytes');
             $this->addHeader('Content-Range', 'bytes ' . $start . '-' . $end . '/' . $size);
             $this->addHeader('Connection', 'close');
             $this->addHeader('Content-Type', $data['mimetype']);
             $this->addContentDispositionHeader();
             return $buffer;
         }
     }
     $this->addHeader('Content-Type', $data['mimetype']);
     $this->addContentDispositionHeader();
     $this->addHeader('Content-Length', $size);
     return $data['content'];
 }
예제 #3
0
 /**
  * Send the whole file content as a response
  */
 public function sendResponse()
 {
     $mimetype = $this->getMimeType();
     $content = $this->view->file_get_contents($this->filepath);
     $data = \OCA\Documents\Filter::read($content, $mimetype);
     header('Content-Type:' . $data['mimetype']);
     $encodedName = rawurlencode($this->getFilename());
     if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])) {
         header('Content-Disposition: attachment; filepath="' . $encodedName . '"');
     } else {
         header('Content-Disposition: attachment; filepath*=UTF-8\'\'' . $encodedName . '; filepath="' . $encodedName . '"');
     }
     header('Content-Length: ' . strlen($data['content']));
     \OC_Util::obEnd();
     echo $data['content'];
 }
예제 #4
0
 /**
  * Send the requested parts of the file
  */
 public function sendResponse()
 {
     if (!preg_match('/^bytes=\\d*-\\d*(,\\d*-\\d*)*$/', $_SERVER['HTTP_RANGE'])) {
         $this->sendNotSatisfiable();
     }
     $mimetype = $this->getMimeType();
     $content = $this->view->file_get_contents($this->filepath);
     $data = \OCA\Documents\Filter::read($content, $mimetype);
     $size = strlen($data['content']);
     $ranges = explode(',', substr($_SERVER['HTTP_RANGE'], 6));
     foreach ($ranges as $range) {
         $parts = explode('-', $range);
         if ($parts[0] === '' && $parts[1] == '') {
             $this->sendNotSatisfiable();
         }
         if ($parts[0] === '') {
             $start = $size - $parts[1];
             $end = $size - 1;
         } else {
             $start = $parts[0];
             $end = $parts[1] === '' ? $size - 1 : $parts[1];
         }
         if ($start > $end) {
             $this->sendNotSatisfiable();
         }
         $buffer = substr($data['content'], $start, $end - $start);
         $md5Sum = md5($buffer);
         // send the headers and data
         header("Content-Length: " . ($end - $start));
         header("Content-md5: " . $md5Sum);
         header("Accept-Ranges: bytes");
         header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size);
         header("Connection: close");
         header("Content-type: " . $data['mimetype']);
         header('Content-Disposition: attachment; filename=' . $this->getFilename());
         \OC_Util::obEnd();
         echo $buffer;
         flush();
     }
 }