Я пытаюсь получить 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 работают нормально. Это, однако, нежелательно, так как я буду работать с файлами, размер которых может быть несколько гигабайт.
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
пары.
$zip->addFile($medium->name, $file, [], "store");
Других решений пока нет …