• PHP 下载图片文件并压缩文件成zip


    1.压缩zip类

    class FileService

    {
      /**
    * 文件夹打包zip并下载
    * @param string $path 源文件路径
    * @param string $filename 压缩文件名
    */
    public static function zipDown($path="",$filename=""){
    $path = iconv("UTF-8", "GBK", $path); //加这行中文文件夹也ok了

    $zip = new \ZipArchive();
    if($zip->open($filename.'.zip', \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
    FileService::addFileToZip($path, $zip);//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
    }
    if(!file_exists('./' . $filename . '.zip')){
    echo 1;die;
    }

    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename=' . basename($filename . '.zip')); //文件名
    header("Content-Type: application/zip"); //zip格式的
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
    header('Content-Length: ' . filesize('./' . $filename. '.zip')); //告诉浏览器,文件大小
    @readfile('./' . $filename . '.zip');//下载到本地
    @unlink('./' . $filename . '.zip');//删除服务器上生成的这个压缩文件
    }

    public static function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
    if(is_dir($path."/".$filename)){
    FileService::addFileToZip($path."/".$filename, $zip);
    }else{
    $zip->addFile($path."/".$filename);
    $zip->renameName($path."/".$filename,$filename); //避免压缩文件多层目录
    }
    }
    }
    @closedir($path);
    }
    }
    2.控制器调用
    $zip_name = "压缩文件名";
    $base_file_path = ROOT_PATH.'/public/file_pics/'.$zip_name.'/';
    if(!is_dir($base_file_path)){
    mkdir ($base_file_path,0777,true);
    chmod ($base_file_path,0777);
    }

    $list = "这里获取要下载的图片列表";
    foreach($list as $val){
    copy($val,$base_file_path.basename($val)); //将要下载的图片copy到下载目录
    }
    FileService::zipDown($base_file_path,$zip_name);  //调用完成下载
     
  • 相关阅读:
    用OpenStack界面轻松创建虚拟机的你,看得懂虚拟机启动的这24个参数么?
    Qemu,KVM,Virsh傻傻的分不清
    我是虚拟机内核我困惑?!
    不是技术也能看懂云计算,大数据,人工智能
    有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!
    FIO性能测试
    Python第三方打包库——PyInstaller
    Python函数和代码复用
    Python分支结构和循环结构
    Python基础随机数库——random
  • 原文地址:https://www.cnblogs.com/luqiangblogs/p/15155731.html
Copyright © 2020-2023  润新知