You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CodeIgniter 4创建并下载包含图片的Zip文件?

CodeIgniter 4 创建含图片的Zip压缩包并实现下载

实现步骤

1. 基础准备

  • 确保目标图片目录(比如public/uploads/images/)有读取权限,且文件存在
  • 直接使用CodeIgniter 4内置的Zip服务,无需额外安装扩展

2. 控制器代码示例

创建控制器(比如DownloadController.php),实现压缩下载逻辑:

<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use Config\Services;

class DownloadController extends Controller
{
    public function zipImages()
    {
        // 定义要压缩的图片路径列表
        $imagePaths = [
            PUBLICPATH . 'uploads/image1.jpg',
            PUBLICPATH . 'uploads/image2.png',
            PUBLICPATH . 'uploads/image3.webp'
        ];

        // 初始化Zip服务
        $zip = Services::zip();

        // 逐个添加图片到Zip包
        foreach ($imagePaths as $path) {
            if (file_exists($path)) {
                // 获取文件名,保持Zip内的文件结构
                $fileName = basename($path);
                $zip->addFile($path, $fileName);
                // 如需在Zip内创建子目录,可改为:
                // $zip->addFile($path, 'images/' . $fileName);
            }
        }

        // 生成Zip并触发下载
        $zipFileName = 'gallery_' . date('YmdHis') . '.zip';
        return $zip->download($zipFileName);
    }
}

3. 路由配置

在app/Config/Routes.php中添加路由,方便访问:

$routes->get('download/zip-images', 'DownloadController::zipImages');

4. 关键注意事项

  • 路径正确性:使用CI4内置常量(PUBLICPATH、WRITEPATH、APPPATH)拼接文件路径,避免相对路径引发的问题
  • 权限问题:确保服务器对图片目录有读取权限,否则无法将文件添加到Zip
  • 大文件/批量处理:如果需要压缩大量图片,直接添加整个目录更高效:
    // 将整个图片目录添加到Zip的images子文件夹
    $zip->addDirectory(PUBLICPATH . 'uploads/images/', 'images');
    
  • 错误处理:可添加判断,当无有效图片时返回提示:
    if (empty($zip->getFiles())) {
        return $this->response->setStatusCode(404)->setJSON(['msg' => '没有可压缩的图片']);
    }
    

内容的提问来源于stack exchange,提问作者Samundar Singh Rajpurohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:06