如何从Symfony中的视图下载文件

时间:2014-02-04 10:58:17

标签: php symfony download http-status-code-404 twig

我有一个用Symfony2制作的应用程序,在我的树枝模板中,我显示了一些带有一些pdf文件的表。

此pdf文件(一个用户)存储在/app/var/pdf/xxx.pdf中。

如果我使用:

<a href="{{ 'entity.pdf' }}">PDF</a>

我的路径是正确的,例如:symfony/app/var/pdf/123123.pdf,但是当我点击链接时,我的浏览器会返回404 Not Found错误。很可惜我已经检查过该文件存储在这条路径中。

任何帮助?

提前致谢。

3 个答案:

答案 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>