我在设置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
我应该使用哪些代码向最终用户提供此文件?
答案 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();