来自Flysystem的php资源的BinaryFileResponse

时间:2015-11-02 23:30:40

标签: php symfony flysystem

我需要使用BinaryFileResponse来正确处理带有长度标题和合作伙伴的视频。此外,我希望用户允许配置其他存储(S3,Dropbox)。 flysystem readStream方法将返回resource,但BinaryFileResponse需要string路径。什么是处理这个的最好方法?首先将整个文件下载到服务器,直到响应?

1 个答案:

答案 0 :(得分:2)

您可以使用StreamedResponse类。你必须自己做一些数据连线,但这很简单。例如,此代码用于启用PDF的“强制下载”。

return new StreamedResponse(function () use ($stream) {
    fpassthru($stream);
    exit();
}, 200, [
    'Content-Transfer-Encoding', 'binary',
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => sprintf('attachment; filename="%s.pdf"', $filename),
    'Content-Length' => fstat($stream)['size'],
]);