1

我在 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)。

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

有没有办法“开始”下载而不是获取整个文件?

有什么建议么 ?

谢谢 :)

4

1 回答 1

0

尝试添加flush();fpassthru($downloadableFileStream);

所以它看起来像

fpassthru($downloadableFileStream);
flush();

你也不需要$mimeType并且$filename在使用中

于 2018-05-21T11:21:42.077 回答