• thinkphp6 批量打包下载图片


    //批量下载图片
    public function download()
    {
    $ids = $this->request->get('ids', '');
    $ids = explode(',', $ids);
    $list = Db::name('apply')->field(['picture'])->whereIn('id', $ids)->select(); //查询数据库中图片地址
    if (!empty($list)) {
    $list = array_column($list, 'picture');
    }
    //在此之前你的项目目录中必须新建一个空的zip包
    $file_template = '../public/uploads/download.zip';
    //自定义文件名
    $card = date('YmdHis');
    //即将打包的zip文件名称
    $downname = $card.'.zip';
    //把你打包后zip所存放的目录
    $file_name = "../public/uploads/".$card."zip";
    //把原来项目目录存在的zip复制一份新的到另外一个目录并重命名(可以在原来的目录)
    $result = copy($file_template, $file_name);
    $zip = new \ZipArchive();
    //打开你复制过后空的zip,包在zip压缩包中建一个空文件夹,成功时返回 TRUE
    if ($zip->open($file_name, \ZipArchive::CREATE) === true) {
    $zip->addEmptyDir($card);
    //根据自己的场景需要去处理业务
    $i = 1;
    foreach ($list as $key => $val) {
    //得到图片后缀名
    if (empty($val)) {
    continue;
    }
    $url = parse_url($val);
    $file_ext = explode('.', $url['path']);
    //图片重命名
    $zip->addFromString($card.'/'.$card.'_'.$i.'.'.$file_ext[1], file_get_contents($val));
    $i++;
    }
    $zip->close();
    $fp = fopen($file_name, "r");
    //获取文件的字节
    $file_size = filesize($file_name);
    //下载需要的header头
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length:".$file_size);
    Header("Content-Disposition: attachment; filename=$downname");
    //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)
    $buffer = 1024;
    //读取的总字节数
    $file_count = 0;
    //向浏览器返回数据,如果下载完成就停止输出
    while (!feof($fp) && $file_count < $file_size) {
    $file_con = fread($fp, $buffer);
    $file_count += $buffer;
    echo $file_con;
    }
    fclose($fp);
    //下载完成后删除压缩包,临时文件夹
    if ($file_count >= $file_size) {
    unlink($file_name);
    }
    }
    }
  • 相关阅读:
    每天一个JavaScript实例-铺货鼠标点击位置并将元素移动到该位置
    Max-Min Fairness带宽分配算法
    Centos Apache和tomcat集成配置,同一时候支持PHP和JAVA执行
    Linux硬件信息查询命令
    D3DXMatrixMultiply 函数
    垃圾回收GC:.Net自己主动内存管理 上(三)终结器
    使用python抓取CSDN关注人的全部公布的文章
    公司-科技:百度
    公司-科技:阿里巴巴
    公司-科技:腾讯
  • 原文地址:https://www.cnblogs.com/huangguojin/p/16249088.html
Copyright © 2020-2023  润新知