PHP下载压缩包

PHP多文件打包并下载压缩包

	/**
     * @name 展厅详情图-获取展厅图片大小
     * @uses 获取展厅图片大小
     * @method GET
     * @author 管舒琪
     * @create 2022/7/27 11:51
     * @request
     * @param string *hui 项目ID
     * @param string *zguan 展馆号 例:5.1
     * @response 返回内容介绍,如“返回JSON结构体,具体键值如下”
     * @return string result success:成功 fail:失败
     * @return string Code 状态码 200:成功,204:失败
     * @return string scalar 资料大小 字节形式
     */
    public function actionGetDownloadSize()
    {
        // $hui = $this->get('hui');
        // $zguan = $this->get('zguan');
        $hui = 317;
        $zguan = '5.1';
       
        if(empty($hui)||empty($zguan)){
            $this->failReturn(204,'缺少必选参数');die;
        }
        
        $query = BoothHuiExhibition::find();
        $query->select('id,guan_img');
        $query->where(['hui_id'=>$hui,'exhibition_nums'=>$zguan]);
        $data = $query->asArray()->all();

        if(empty($data)){
            $this->failReturn(204,'数据为空');die;
        }
        $size = 0;//文件不存在的数量
        foreach ($data as $k => $v){
            $filename = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
            if(file_exists($filename)){
                $size += filesize($filename);
            }
        }
        $this->successReturn($size,'获取成功');
    }

    /**
     * @name 展厅详情-下载展厅详情图
     * @uses 下载展厅详情图
     * @method GET
     * @author 管舒琪
     * @create 2022/7/27 14:40
     * @request
     * @param string *hui 项目ID
     * @param string *zguan 展馆号 例:5.1
     * @response 返回内容介绍,如“返回JSON结构体,具体键值如下”
     * @return string result success:成功 fail:失败
     * @return string Code 状态码 200:成功,204:失败
     * @return string scalar 压缩文件名称
     */
    public function actionRawCh()
    {
        // $hui = $this->get('hui');
        // $zguan = $this->get('zguan');
        $hui = 317;
        $zguan = '5.1';
       
        if(empty($hui)||empty($zguan)){
            $this->failReturn(204,'缺少必选参数');die;
        }
        $huiInfo = HuiZhan::findOne($hui);
        $query = BoothHuiExhibition::find();
        $query->select('id,guan_img');
        $query->where(['hui_id'=>$hui,'exhibition_nums'=>$zguan]);
        $data = $query->asArray()->all();

        if(empty($data)){
            $this->failReturn(204,'数据为空');die;
        }
        $size = 0;//文件不存在的数量
        foreach ($data as $k => $v){
            $filename = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
            if(file_exists($filename)){
                $size += filesize($filename);
            }
        }
        //如果图片都不存在
        if($size/1024 > 1024*200){
            $this->failReturn(204,'下载资料文件过大');die;
        }

        $zip = new \ZipArchive();//PHP内置压缩函数
        $filename = $zguan.'展厅'.$huiInfo->hui_nickname.'设施图.zip';
        $zip->open('./'.$filename,$zip::CREATE);
        $empty = 0;//文件不存在的数量
        foreach ($data as $k => $v){
            $file = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
            if(file_exists($file)){
                $fileData = file_get_contents($file);
                $url = explode('/',$v['guan_img']);
                // $zip->addEmptyDir(str_replace('/','-',$value['czs_number']).'/'.$val['liao_name']);
                $zip->addFromString(end($url), $fileData);
                $empty = $empty+1;
            }
        }
        //如果图片都不存在
        if($empty==0){
            $this->failReturn(204,'文件不存在');
        }
        $zip->close();
        $this->successReturn($filename,'已生成压缩包');
    }

版权声明:本文为weixin_45636482原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。