如何按照目录名称批量打包图片生成压缩包?

之前由于图片是放在服务器上,所以可以通过Zip将图片打成压缩包然后下载,但是现在图片都放在七牛云OSS上,想知道这种情况该如何按照目录名称批量下载打成压缩包?下面是图片在服务器上的情况,这种是可以的

class ExcellentBatchExportImage extends BatchAction
{
    public $name = '批量导出logo图片';

    public function handle(Collection $collection)
    {
        //  要下载的压缩包的名称
        $zip_file = 'logo.zip';
        //  初始化zip类
        $zip = new \ZipArchive();
        $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);

        foreach ($collection as $model) {
            $path = storage_path('app/public');
            $dirname = $model->id.'号-'.str_replace('/', '&', $model->brand_name);
            //  品牌logo
            $filePath = $path.'/'.$model->brand_logo;
            $basename = basename($model->brand_logo);
            $zip->addFile($filePath, $dirname.'/'.$basename);
        }
        $zip->close();

        return $this->response()->success('品牌logo图片导出成功!')->refresh();
    }

}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

资源:

  1. 多个文件压缩到一个zip
  2. 创建下载文件

流程:

  1. ajax下载所有文件
  2. jszip打包
  3. downloadjs下载
1年前 评论
ljheisenberg (楼主) 1年前
讨论数量: 8

可以尝试: 1.通过云存储网关挂载OSS; 2.先把文件下载到服务器再压缩,最后下载完成删除。 缺点就是没法享受cdn加速了,而且服务器和云存储最好在同一区域。

1年前 评论
ljheisenberg (楼主) 1年前

条件符合的话可以试试服务器只负责返回资源列表,由前端用js下载和打包,用户体验更好,可享受cdn加速,对于不对外的文件许多oss也有对应的jssdk

1年前 评论
ljheisenberg (楼主) 1年前
renxiaotu (作者) 1年前

资源:

  1. 多个文件压缩到一个zip
  2. 创建下载文件

流程:

  1. ajax下载所有文件
  2. jszip打包
  3. downloadjs下载
1年前 评论
ljheisenberg (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!