1

在此处输入图像描述

如上图所示,我有组织在虚拟文件夹中的图像(在 mysql 数据库中,但不是真实文件夹)。我需要将选定的文件夹以zip 的形式提供下载 。我能够压缩图像,但我们如何添加子目录以便向其中添加图像(我尝试使用 addEmptyDir()但无法找到将图像添加到其中的方法!)。如果不创建物理文件夹,这真的可能吗?

请建议!

4

2 回答 2

7

感谢@dnagirl 的回答,但我实际上是在寻找一种在子文件夹中添加文件的方法(也许我无法让自己清楚!)

发现如果我们给出 ' path/to/filename' 而不仅仅是 ' filename' ,zipArchive 会自动创建文件夹

这就是我实现它的方式,以防有人需要它!

function zipFilesAndDownload($file_names,$archive_file_name,$img_localpath)
{
  $folder_path=WSP_AK_PLUGIN_DIR ."akTempFolder/";
  $zip = new ZipArchive();
  if ($zip->open($folder_path.$archive_file_name, ZIPARCHIVE::CREATE )===TRUE) {
    //$zip->addEmptyDir('myimages');(this was what i thought would create folder!)
    foreach($file_names as $files)
    {
        //$zip->addFile($img_localpath.'/'.$files, 'myfolder/'.$files);
        $zip->addFile($img_localpath.'/'.$files['fileName'],    $files['folder_path'].$files['fileName']);
    }
    $zip->close();

在上面的代码$files['folder_path']中将给出创建文件的路径例如folder1/folder2/image1.jpg

    header("Content-type: application/zip"); 
    header("Content-Disposition: attachment; filename=$archive_file_name");
    header('Content-Type: application/force-download');
    header('Content-Length: ' . filesize($folder_path.$archive_file_name));
    header("Pragma: no-cache"); 
    header("Expires: 0");
    if( file_exists($folder_path.$archive_file_name)) {
        ob_clean();
        readfile($folder_path.$archive_file_name);
    }
    unlink($folder_path.$archive_file_name);
  }
}
于 2012-09-23T09:21:23.830 回答
1

如果要添加到 zip 目录的“文件”作为字符串存储在数据库中,则可以使用ZipArchive::addFromString. 如果数据库存储指向实际文件的指针,请使用ZipArchive::addFile

于 2012-08-13T11:59:44.507 回答