Laravel-S3多文件压缩和下载



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

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:返回的数组

IlluminateSupportCollection {#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, 
]);
}

您可能需要更改我使用的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);
}
}
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文件夹中,并将照片保存在照片夹中。

别忘了更改bucket的名称。它对我来说很顺利。