代码之家  ›  专栏  ›  技术社区  ›  brice

Laravel Zipstream从流添加文件

  •  1
  • brice  · 技术社区  · 8 年前

    我正在努力 ZipStream 在Laravel 5.4中工作。我想从s3流文件来创建一个ZipStream,然后返回到浏览器。

    这是我的行动方法:

    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文件就可以正常工作。然而,这是不可取的,因为我将与文件,可以是几GB大的工作。

    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();
        });
    }
    

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   brice    8 年前

    通过为 storage_method

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