Laravel Zipstream 从流中添加文件
Posted
技术标签:
【中文标题】Laravel Zipstream 从流中添加文件【英文标题】:Laravel Zipstream add file from stream 【发布时间】:2017-09-24 05:24:38 【问题描述】:我正在尝试让 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 文件出了什么问题?
谢谢!
【问题讨论】:
【参考方案1】:通过为 storage_method
参数指定“存储”使其工作。
$zip->addFile($medium->name, $file, [], "store");
【讨论】:
以上是关于Laravel Zipstream 从流中添加文件的主要内容,如果未能解决你的问题,请参考以下文章