3

我通常不会在 Stack Overflow 上发布任何问题,因为无论遇到什么问题,我总能找到答案。但是在这里,我还没有找到一个明确的答案,所以如果你能帮助我,非常感谢!

我正在开发一个 Symfony 3.4 网站。我在控制器中创建了一个脚本,以将文件作为 BinaryFileResponse 返回。

$response = new BinaryFileResponse($pathtofile);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
return $response;

起初,下载过程正常,但到最后,出现错误。Chrome 返回“网络错误”故障,下载的文件保留为.crdownload而不是在我的情况下重命名为.mp3 。(注意:如果我手动将文件重命名为.mp3,它可以正确播放。)

我已经在标题的 content-length 属性上搜索了一个可能的问题,但是当我在此处检查 Symfony Profiler Capture时,它​​似乎被正确发送

我找到了一种通过使用 Symfony 文档中提到的流来绕过此错误的方法,如下所示:

$stream  = new Stream('path/to/stream');
$response = new BinaryFileResponse($stream);

我的文件由 PHP 脚本提供,但不是由它生成的。有没有办法将它作为静态文件而不是流来提供?

使用流解决方案,客户端看不到文件的实际大小,这对用户来说不是很友好。此外,它真的很慢。

谢谢你的帮助 !

编辑:第一个解决方案适用于本地主机,但不适用于生产服务器。

4

0 回答 0