我通常不会在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服务器上不可用。