实现打包下载附件某个目录下边所有的附件 - 回这世界

我刚好有个系统的业务逻辑和你的一样

我把关键代码给你

 public function downloadall($ids)
    {

        $snno = $this->model->where('id', $ids)->value('snno');
        $path = '/www/wwwroot/yourprojectname/public/qrcode/' . $snno;
        $zip = new \ZipArchive();
        $end_dir = $snno . date('YmdHis', time()) . '.zip';//定义打包后的包名

        if ($zip->open($end_dir, \ZipArchive::CREATE) === TRUE) {
            $this->addFileToZip($path, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
            $zip->close(); //关闭处理的zip文件
        }
        $file = '/www/wwwroot/yourprojectname/public/' . $end_dir;
        $fileTmp = pathinfo($file);
        $fileExt = $fileTmp['extension'];
        $fp = fopen($file, "r");
        $saveFileName = $end_dir;
        $file_size = filesize($file);
        //下载文件需要用到的头
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length:" . $file_size);
        Header("Content-Disposition: attachment; filename=" . $saveFileName);
        $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);
        exit;

    }
    private function addFileToZip($path, $zip)
    {
        $handler = opendir($path); //打开当前文件夹由$path指定。
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作
                $zip->addFile($path . "/" . $filename);
            }
        }
        @closedir($path);
    }

执行downloadall方法 即可先压缩对应目录所有文件 然后自动下载

点赞(0) 打赏

书签

技术

知识

立即下载

视频

导图

配色

教程

代码

素材

评论列表 0

暂无评论

发表评论 取消回复

桌面
浮点
分享
链接
快捷
记账
快捷
运动
热门
书签
菜单
显示
返回
顶部