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

之前由于图片是放在服务器上,所以可以通过 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();
    }

}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

资源:

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

流程:

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

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

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

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

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

资源:

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

流程:

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