批量下载和单独的文档流形式下载

/**
     * @title 批量下载图片
     * @description 批量下载图片
     * @author 卡卡
     * @method POST
     */
    public function download_batch()
    {
        $img_space_ids = input('img_space_ids');
        $result = getSelect('img_space',['img_space_id'=>['in',$img_space_ids]],'create_time desc','file_path');
        $array = array();
        foreach ($result as $k=>$v){
            array_push($array,$this->url.$v['file_path']);
        }
        $tmpFile = tempnam(sys_get_temp_dir(), '');  //临时文件
        $zip = new \ZipArchive();  //php内置的压缩类
        $zip->open($tmpFile, \ZipArchive::CREATE);
        foreach ($array as $value) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_POST, 0);
            curl_setopt($ch, CURLOPT_URL, $value);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $fileContent = curl_exec($ch);
            curl_close($ch);
            $zip->addFromString(basename($value), $fileContent);  //将文件循环压缩到压缩包
        }
        $zip->close();
        header('Content-Type: application/zip');
        header("Content-disposition: attachment; filename=图片下载.zip");
        header("'Content-Length: ' . filesize($tmpFile)");
        readfile($tmpFile);
        unlink($tmpFile);
    }

    /**
     * @title 单独下载图片
     * @description 单独下载图片
     * @author 卡卡
     * @method POST
     */
    public function download()
    {
        $img_space_id = input('img_space_id');
        $img_space_info = getFind('img_space',['img_space_id'=>$img_space_id],'img_space_id,file_path,file_name');
        $localfile = ROOT_PATH . 'public' . DS . $img_space_info['file_path'];
        $file_file_size = filesize ($localfile);
        $file_path = $localfile;
        # 以只读和二进制模式打开文件   
        $file = fopen ( $file_path, "rb" ); 
        # 告诉浏览器这是一个文件流格式的文件    
        Header ( "Content-type: application/octet-stream" ); 
        # 请求范围的度量单位  
        Header ( "Accept-Ranges: bytes" );  
        # Content-Length是指定包含于请求或响应中数据的字节长度    
        Header ( "Accept-Length: " . $file_file_size );  
        # 用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
        Header ( "Content-Disposition: attachment; filename=" . $img_space_info['file_name'] );    
        # 读取文件内容并直接输出到浏览器    
        echo fread ( $file, $file_file_size );    
        fclose ( $file );    
        exit ();      
    }

 

posted @ 2021-04-16 19:35  爱家家的卡卡  阅读(72)  评论(0编辑  收藏  举报