如何在codeigniter中将文件夹转换为Zip文件,其中文件夹包含一些图像文件
Posted
技术标签:
【中文标题】如何在codeigniter中将文件夹转换为Zip文件,其中文件夹包含一些图像文件【英文标题】:how to convert folder into Zip file in codeigniter where folder contains some image file 【发布时间】:2017-11-09 16:29:03 【问题描述】:我对在codeigniter中压缩文件夹有一些疑问。实际上我在文件夹中有一些图像文件,我试图在codegiter中压缩这个文件夹。我有查看文件,我在其中编写了“下载所有文件”按钮。单击此按钮时,我必须取出文件夹并将其压缩。 我的视图文件: 我在锚标签内写了“下载所有文件”按钮。
<tr>
<td align="right">
<?php if(isset($AppData) && !empty($AppData))
$applicantNo = $AppData[0]['appid']; ?>
<a href='<?php echo base_url("admin/downloadAllFileZip/$applicantNo");?>'><input type="submit" name="download" value="Download All Files" /></a>
<?php ?>
</td>
</tr>
控制器代码: 在 admin.php 控制器文件中,我有以下方法
public function downloadAllFileZip($appId)
$path = file_get_contents(base_url().'files/'.$appId);
$applicant_id = $appId;
$this->zip->add_data($applicant_id,$path);
$this->zip->archive('/files/'.$applicant_id);
$this->zip->download($applicant_id);
但是,当我单击“下载所有文件”按钮时,正在弹出用于压缩的弹出窗口,并且在下载其显示的 1kb 文件后,该文件上没有图像。我可以将单个图像文件压缩为 zip 文件,但不能压缩整个文件夹。请帮助我如何做到这一点。
【问题讨论】:
【参考方案1】:像这样添加你的所有文件。例如:
foreach ($query->result() as $row)
$this->zip->read_file($row->filename);
$this->zip->download('files_backup.zip');
【讨论】:
不需要取 foreach ($query->result() as $row)。我没有写任何 sql 查询 仅供参考,您可以这样添加图片文件 只是我从锚链接的参数中传递文件夹名称,在控制器中我从路径中获取文件夹名称并将其压缩。【参考方案2】:要归档文件夹中的所有文件,请使用$this->zip->read_dir();
方法。例如,
$path = '/path/to/folder';
$this->zip->read_dir($path);
$this->zip->archive('/path/to/folder/foldername.zip');
了解更多信息。请看:https://www.codeigniter.com/user_guide/libraries/zip.html
【讨论】:
我使用了 $this->zip->add_dir();以上 $this->zip->read_file() 我可以下载文件夹,但文件夹内没有图像文件。 请检查文件夹权限,应该是755或777。 不在服务器中。我可以使用相同的代码以 zip 格式下载单个图像。我可以下载文件夹,但文件夹内没有可用的图片。【参考方案3】:Zip 库允许您创建 Zip 档案
$this->load->library('zip');
提供要添加到存档中的文件夹的路径
$file_name='backup['.date('d-m-Y-H:i:s').'].zip';
$this->zip->read_dir($_SERVER['DOCUMENT_ROOT']."/uploads/images",FALSE);
$this->zip->download($file_name);
我认为给特定文件夹上的存档文件夹提供绝对路径是更好的方法
【讨论】:
不添加 $this->zip->add_dir($appId);单击“下载所有文件”按钮后,它会重定向到空白页面,因此我已添加。我可以下载 zip 文件,但文件夹是空的 首先从您的文件夹中打开一个图像到浏览器,然后将相同的 url 粘贴到读取目录中并检查它的工作与否像$this->zip->read_file($_SERVER['DOCUMENT_ROOT']."/uploads/img/img1.png",FALSE);
是的,我可以看到图像,但我已经下载了整个文件夹。
在我的项目中,files是包含候选人注册号的文件夹名称,作为包含文档的文件夹名称。
那么上面的代码应该与read_dir
一起工作,无论您的文件夹中包含哪种类型的东西。@RagithThomas【参考方案4】:
$this->load->library('zip');
$path = '/path/to/your_directory/';
$this->zip->read_dir($path);
$this->zip->download('my_backup.zip');
【讨论】:
以上是关于如何在codeigniter中将文件夹转换为Zip文件,其中文件夹包含一些图像文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring MVC 中将字节数组转换为 ZipOutputStream?
对在 django 中将 CSV 文件转换为 ZIP 文件感到困惑
在 CodeIgniter 的 url_title 函数中将单引号转换为分隔符
在 csv_from_result 方法中将 mysql 时间戳转换为我们在 codeigniter 查询对象中的日期