使用Flysystem处理大型文件

时间:2018-05-21 10:02:45

标签: php symfony flysystem

我在Symfony应用程序中使用Flysystem来管理S3上的文件上传/下载。

$downloadableFileStream = $this->get("filesystem")->readStream($document->getDocument()),
$mimeType = $this->get("filesystem")->getMimetype($document->getDocument()),
$filename =$document->getDocument()

if (ob_get_level()) ob_end_clean();
return new StreamedResponse(function () use ($downloadableFileStream, $mimeType, $filename) {
    fpassthru($downloadableFileStream);
}, 200, [
    'Content-Transfer-Encoding', 'binary',
    'Content-Type' => "application/octet-stream",
    'Content-Disposition' => ('attachment; filename="' . $filename . '"'),
    'Content-Length' => fstat($downloadableFileStream)['size'],
]);

对于大文件来说真的很慢,我在想使用流不会将所有文件都放在内存中,也许我做错了什么? (我上传时遇到同样的问题,我使用putStream)。

即时下载小文件,但对于大文件,似乎在启动下载之前将完整文件加载到文件系统中。

有没有办法开始"开始"下载没有得到entiere文件?

有什么建议吗?

谢谢:)

1 个答案:

答案 0 :(得分:0)

尝试在flush();

之后添加fpassthru($downloadableFileStream);

所以它看起来像

fpassthru($downloadableFileStream);
flush();

此外,您无需使用$mimeType$filename