我正在尝试让ZipStream在 Laravel 5.4 中工作。我想从 s3 流式传输文件以创建返回给浏览器的 ZipStream。
目前,我的代码会生成与有效 ZIP 文件大小相同的损坏 ZIP 文件。
这是我的操作方法:
public function mediaZip(User $user)
{
return response()->stream(function () use ($user) {
$zip = new ZipStream($user->name . ".zip", [
'content_type' => 'application/octet-stream'
]);
foreach ($user->media as $medium) {
$stream = Storage::disk("s3")->readStream($medium->location);
$zip->addFileFromStream($medium->name, $stream);
}
$zip->finish();
});
}
如果我使用下面的代码将每个文件读入内存,则 ZIP 文件可以正常工作。然而,这是不可取的,因为我将处理可能有几 GB 大的文件。
public function mediaZip(User $user)
{
return response()->stream(function () use ($user) {
$zip = new ZipStream($user->name . ".zip", [
'content_type' => 'application/octet-stream'
]);
foreach ($user->media as $medium) {
$file = Storage::disk("s3")->read($medium->location);
$zip->addFile($medium->name, $file);
}
$zip->finish();
});
}
谁能帮我弄清楚 ZIP 文件出了什么问题?
谢谢!