Symfony二进制文件响应在下载过程结束时失败

时间:2018-11-22 10:12:05

标签: php symfony http symfony-http-foundation

我通常不会在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 here

时,似乎正确发送了问题

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

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

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

使用流解决方案时,客户端看不到文件的实际大小,这实际上不是用户友好的。而且,它真的很慢。

感谢您的帮助!

EDIT:第一个解决方案在localhost上有效,但在prod服务器上不可用。

0 个答案:

没有答案