我有一个用Symfony2制作的应用程序,在我的树枝模板中,我显示了一些带有一些pdf文件的表。
此pdf文件(一个用户)存储在/app/var/pdf/xxx.pdf
中。
如果我使用:
<a href="{{ 'entity.pdf' }}">PDF</a>
我的路径是正确的,例如:symfony/app/var/pdf/123123.pdf
,但是当我点击链接时,我的浏览器会返回404 Not Found错误。很可惜我已经检查过该文件存储在这条路径中。
任何帮助?
提前致谢。
答案 0 :(得分:2)
要强制下载pdf文件,请在控制器中尝试此操作。
/**
* @Route("/download/{id}",name="pdf_download")
*/
public function downloadAction($id) {
$downloadedFile = $repository->findOneBy(
array(
'id' => $id,
)
);
$response=new Response();
$response = new Response();
$response->headers->set('Content-type', 'application/octet-stream');
$response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $downloadedFile->getFilename() ));
$response->setContent(file_get_contents($downloadedFile->getAbsolutePath()));
$response->setStatusCode(200);
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
return $response;
}
在模板中
<a href={{path('pdf_download',{'id':file.id})}}>{{file.filename}}</a>
答案 1 :(得分:1)
您最好将此文件存储在公共web
目录中,然后创建指向它的链接,如:
<a href="{{ asset('web/var/pdf/xxx.pdf') }}"/>PDF</a>
但浏览器会在新标签中打开pdf
个文件。如果你真的想强制下载这个文件,需要使用标题。使用此问题寻求帮助Symfony2 - Force file download
答案 2 :(得分:0)
您可以使用如下所示的绝对URL
<a href="{{ absolute_url(asset('uploads/YOURPATCH/'))}}pdf_download" download>
Download
</a>