如何在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-&gt;zip-&gt;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-&gt;zip-&gt;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 查询对象中的日期

如何在CodeIgniter中将上载的文件(PDF,DOC等)显示为可下载的链接

Codeigniter 的 zip 下载文件为空