php Laravel - S3多文件压缩和下载

z9gpfhce  于 11个月前  发布在  PHP
关注(0)|答案(2)|浏览(81)

有没有办法在Laravel的return中循环或执行一些foreach操作?我有这个软件包https://github.com/stechstudio/laravel-zipstream的zip下载从s3。All适用于单个文件和多个文件,但仅当每个文件在单独的行中提供时。

use Zip; 
public function z4()
    {
    return Zip::create("package.zip")
                ->add("s3://testbucket/images/26/17/full/BS288.jpg", "BS288.jpg")
                ->add("s3://testbucket/images/26/17/full/BS289.jpg", "BS289.jpg")
                ->add("s3://testbucket/images/26/17/full/BS290.jpg", "BS290.jpg")
    }

但如何使用数据库中的数据进行此操作

$photos = DB::table('gallery_image')
                ->where('folder_id','=',$id)
                ->select('original_name')->get();

这是从$photos返回的数组:

Illuminate\Support\Collection {#1017 ▼
        #items: array:131 [▼
          0 => {#1025 ▼
            +"original_name": "BS288.jpg"
          }
          1 => {#1022 ▼
            +"original_name": "BS289.jpg"
          }
          2 => {#1026 ▼
            +"original_name": "BS290.jpg"
          }

这段代码总是返回一个文件

foreach($photos as $image) {
     
            return Zip::create("package.zip", [
                "s3://asystentfotografa/images/26/17/full/".$image->original_name, 
              ]);
 }
kr98yfug

kr98yfug1#

您可能需要更改我使用的field names,因为它们可能不准确,但是,像下面这样的东西呢?

public function z4()
{
    $photos = DB::table('gallery_image')
                ->where('folder_id','=',$id)
                ->select('original_name')->get();

    $zip = Zip::create('package.zip');

    foreach ($photos as $photo) {
        $zip->add('s3://testbucket/images/' . $photo->gallery_id . '/' . $photo->folder_id . '/full/' . $photo->original_name);
    }
}
5tmbdcev

5tmbdcev2#

function downloadZipImage() {
        $assets = Asset::get(['photos', 'qr']);
        
        $zip = Zip::create("All photos.zip");
        foreach ($assets as $asset) {
            # code...
            if($asset->qr != null){
                $zip->add('s3://somebucket/qrcode/'.$asset->qr, "qrcode/" .  $asset->qr);
            }
            if($asset->photos !=null){
                $zip->add('s3://somebucket/photos/'.$asset->photos, "photos/".$asset->photos );
            }
        }
        
        return $zip;
    }

上面的代码将二维码照片保存在 qrcode 文件夹,照片保存在 photos 文件夹。
不要忘记更改存储桶的名称。它在我身上工作顺利。

相关问题