Laravel Zipstream добавить файл из потока

Я пытаюсь получить 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?

Спасибо!

0

Решение

Получил это, указав «магазин» для storage_method пары.

$zip->addFile($medium->name, $file, [], "store");

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]