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");