如何使用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
相关产品推荐
相关产品推荐

