2017-09-24 21 views
0

我試圖獲得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文件出了什麼問題嗎?

謝謝!

回答

0

通過指定storage_method param的「store」來實現它的工作。

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