通过symfony2提供文件 - 上传目录的路径

时间:2015-07-08 18:38:16

标签: symfony

我在设置symfony2上传目录的正确路径时遇到问题。

我正在尝试向用户提供他们之前上传的文件。

首先,我尝试了以下代码:

$response = new Response();
        $d = $response->headers->makeDisposition(
         ResponseHeaderBag::DISPOSITION_ATTACHMENT,
         $document->getWebPath()
         );
         $response->headers->set('Content-Disposition', $d);

根据食谱和How to get web directory path from inside Entity?的建议。

然而,这导致以下错误:

 The filename and the fallback cannot contain the "/" and "\" characters. 

因此我决定改用:

     $filename = $this->get('kernel')->getRootDir() . '/../web' . $document->getWebPath();

     return new Response(file_get_contents($filename), 200, $headers);
然而,这会导致:

Warning: file_get_contents(/***.pl/app/../web/uploads/documents/2.pdf) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory 

我想要投放的文件位于

/web/uploads/documents/2.pdf

我应该使用哪些代码向最终用户提供此文件?

1 个答案:

答案 0 :(得分:2)

为了提供二进制文件,最好使用BinaryFileResponse,它接受​​绝对文件路径作为参数。 setContentDisposition()不接受文件路径,但接受文件名...并且该参数是可选的(只有在您想要更改为最终用户提供的文件的名称时才应使用它):

use Symfony\Component\HttpFoundation\BinaryFileResponse;

$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
    ResponseHeaderBag::DISPOSITION_ATTACHMENT, $fileName
); // This line is optional to modify file name

关于文件路径,您可以继续使用您显示的代码,但略有改变:

$filePath = $this->container->getParameter('kernel.root_dir')
        .'/../web/'
        .$document->getWebPath();