diff --git a/app/Controller/FileViewerController.php b/app/Controller/FileViewerController.php index 518f5b0b4..3e0182bad 100644 --- a/app/Controller/FileViewerController.php +++ b/app/Controller/FileViewerController.php @@ -82,6 +82,31 @@ class FileViewerController extends BaseController } } + /** + * Display file in browser + * + * @access public + */ + public function browser() + { + $file = $this->getFile(); + $etag = md5($file['path']); + $this->response->withContentType($this->helper->file->getBrowserViewType($file['name'])); + $this->response->withCache(5 * 86400, $etag); + + if ($this->request->getHeader('If-None-Match') === '"'.$etag.'"') { + $this->response->status(304); + } else { + + try { + $this->response->send(); + $this->objectStorage->output($file['path']); + } catch (ObjectStorageException $e) { + $this->logger->error($e->getMessage()); + } + } + } + /** * Display image thumbnail * diff --git a/app/Helper/FileHelper.php b/app/Helper/FileHelper.php index cabf371cc..82b444d0d 100644 --- a/app/Helper/FileHelper.php +++ b/app/Helper/FileHelper.php @@ -106,4 +106,23 @@ class FileHelper extends Base return null; } + + /** + * Return the browser view mimetype based on the file extension. + * + * @param $filename + * + * @return string + */ + public function getBrowserViewType($filename) + { + $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + + switch ($extension) { + case 'pdf': + return 'application/pdf'; + } + + return null; + } } diff --git a/app/Template/project_overview/files.php b/app/Template/project_overview/files.php index 826e63259..1326a7d14 100644 --- a/app/Template/project_overview/files.php +++ b/app/Template/project_overview/files.php @@ -18,6 +18,11 @@ = $this->url->link(t('View file'), 'FileViewerController', 'show', array('project_id' => $project['id'], 'file_id' => $file['id']), false, 'popover') ?> + file->getBrowserViewType($file['name']) !== null): ?> +