云迈博客

您现在的位置是:首页 > 灌水专栏 > 正文

灌水专栏

php多文件打包下载

阳帅2022-10-12灌水专栏210
publicfunctiondownload(){//接收传递进来的参数$post=request()-˃param();
 public function download()
    {


        //接收传递进来的参数
        $post = request()->param();
        $info = $this->model->alias('b')->field('b.*,u.nickname,a.name,u.mobile,a.type')->join('User u', 'b.user_id=u.id', 'left')->join('Association a', 'b.activity_id=a.id', 'left')->where(['b.id' => $post['ids']])->find();


        //判断类型

        $yxgc = [
            $info['yxgc_01_file'],
            $info['yxgc_02_file'],
            $info['yxgc_03_file'],
            $info['yxgc_04_file'],
            $info['yxgc_05_file'],
            $info['yxgc_06_file'],
            $info['yxgc_07_file'],


        ];
        $kjjb = [
            $info['kjjb_01_file'],
            $info['kjjb_02_file'],
            $info['kjjb_03_file'],
            $info['kjjb_04_file'],
            $info['kjjb_05_file'],
            $info['kjjb_06_file'],
            $info['kjjb_07_file'],
            $info['kjjb_08_file'],

        ];
        $sjdw = [
            $info['sjdw_01_file'],
            $info['sjdw_02_file'],
            $info['sjdw_03_file'],
            $info['sjdw_04_file'],
            $info['sjdw_05_file'],
            $info['sjdw_06_file'],
            $info['sjdw_07_file'],
            $info['sjdw_08_file'],
            $info['sjdw_09_file'],
            $info['sjdw_10_file'],

        ];
        $sqqy = [
            $info['sqqy_01_file'],
            $info['sqqy_02_file'],
            $info['sqqy_03_file'],
            $info['sqqy_04_file'],
            $info['sqqy_05_file'],
            $info['sqqy_06_file'],
            $info['sqqy_07_file'],

        ];


        $files = explode(',', trim($info['files'], ","));
        $type='';
        switch ($info['type']) {
            case '1':
                $files = array_merge($files, $kjjb);
                $type='kjjb';
                break;//科技进步
            case '2':
                $files = array_merge($files, $yxgc);
                $type='yxgc';
                break;//优秀工程
            case '3':
                $files = array_merge($files, $sjdw);
                $type='sjdw';
                break;//十佳单位
            case '4':
                $files = array_merge($files, $sqqy);
                $type='sqqy';
                break;//十佳企业
        }


        $fileList = array();

        foreach ($files as $k => $v) {
            if (!$v) {
                continue;
            }
            //正则匹配是否为全路径
            $file=preg_match('[http://|https://]', $v)?$v:dirname(dirname(dirname(__DIR__))) . '/public' . $v;
            if ($k==0) {
                $fileArr = ['real_name' => '文件', 'resume_file' => $file];
            }else {
                $name=$type.'_'.sprintf('%02d',$k).'_file';
                $fileArr = ['real_name' => __($name), 'resume_file' => $file];
            }
            //查询信息
            $fileData = file_get_contents($fileArr['resume_file']);
            if ($fileData) {
                //存储信息
                $fileList[] = $fileArr;
            }
        }
        //定义临时zip文件
        $filename = time().'.zip';

        //new PHP类库的zip压缩类

        $zip = new \ZipArchive();
        //打开文件
        $zip->open($filename, \ZipArchive::CREATE | \ZipArchive::OVERWRITE | \ZipArchive::CM_STORE);
        //循环信息数组
        foreach ($fileList as $key => $vo) {
            //分割文件路径,获取后缀名
            $fileArrHz = explode('.', $vo['resume_file']);
            //获取数组最后一个参数,后缀名
            $type = $fileArrHz[count($fileArrHz) - 1];
            //获取文件内容
            $fileData = file_get_contents($vo['resume_file']);
            //判断信息是否存在
            if ($fileData) {
                //将文件重新定义名称,用户名 + 后缀名
                $zip->addFromString($vo['real_name'] . '.' . $type, $fileData);
            }
        }

        //关闭zip类
        $zip->close();
        //打开临时压缩包
        $file = fopen($filename, "r");
        $filename1 = $info['name'] . '_' . $info['mobile'] . "_" . date('Y年m月d日h时i分s秒') . ".zip";

        //定义header头信息
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: " . filesize($filename));
        Header("Content-Disposition: attachment; filename=" . $filename1);
        //一次只传输1024个字节的数据给客户端
        $buffer = 1024; //

        while (!feof($file)) {
            //将文件读入内存
            $file_data = fread($file, $buffer);
            //每次向客户端回送1024个字节的数据
            echo $file_data;
        }
        //关闭文件
        fclose($file);
        $this->success('成功');
    }

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~