public function articleFileAction(ArticleFile $articleFile) { $fileManager = $this->get('jb_fileuploader.file_history.manager'); $rootDir = $this->getParameter('kernel.root_dir'); $assetHelper = $this->get('templating.helper.assets'); $fileHistory = $fileManager->findOneByFileName($articleFile->getFile()); $path = $rootDir . '/../web' . $fileManager->getUrl($fileHistory); $path = preg_replace('/\\?' . $assetHelper->getVersion() . '$/', '', $path); $explode = explode('.', $fileHistory->getOriginalName()); $mime = end($explode); if (!empty($articleFile->getArticle()->getDoi())) { $fileOriginalName = $articleFile->getArticle()->getDoi() . '-' . $articleFile->getId() . '.' . $mime; } else { $fileOriginalName = $articleFile->getArticle() . '-' . $articleFile->getId() . '.' . $mime; } $fileOriginalName = str_replace('/', '-', $fileOriginalName); $fileOriginalName = str_replace('\\', '-', $fileOriginalName); $fs = new Filesystem(); if (!$fs->exists($path)) { throw $this->createNotFoundException(); } $response = new BinaryFileResponse($path); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE, preg_replace('/[[:^print:]]/', '_', $fileOriginalName)); $event = new DownloadArticleFileEvent($articleFile); $dispatcher = $this->get('event_dispatcher'); $dispatcher->dispatch(SiteEvents::DOWNLOAD_ARTICLE_FILE, $event); return $response; }