I'm trying to get ZipStream working in Laravel 5.4. I want to stream files from s3 to create a ZipStream which is returned to the browser.
Currently my code produces corrupt ZIP files the same size as valid ZIP files.
This is my action method:
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();
    });
}
If I read each file into memory using the code below, the ZIP files work fine. This is however undesirable as I will be working with files that can be several gigabytes large.
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();
    });
}
Can anyone help me figure out what's going wrong with the ZIP files?
Thanks!