Laravel Zipstream从流中添加文件
问题描述:
我试图获得ZipStream在Laravel 5.4中工作。我想从s3流文件来创建一个ZipStream,它返回到浏览器。Laravel 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文件做工精细。然而,这是不受欢迎的,因为我将使用几千兆字节大小的文件。
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文件出了什么问题吗?
谢谢!
答
通过指定storage_method
param的“store”来实现它的工作。
$zip->addFile($medium->name, $file, [], "store");