代码是按照我需要的内容编写的,里面有注释,可以按照注释修改为自己需要的内容。
public function download(){ //接收传递进来的参数 $post = request()->param(); //接收ID,并进行去除两边的 , $ids = explode(',', trim($post['id'],",")); //定义空数组 $fileList = array(); //循环ID foreach ($ids as $k => $v) { //查询信息 $fileArr = M('user')->field('real_name,resume_file,resume_name')->find($v); if(!empty($fileArr['resume_file'])){ //将文件补全路径 $fileArr['resume_file'] = dirname(dirname(dirname(__DIR__))).$fileArr['resume_file']; //存储信息 $fileList[] = $fileArr; } } //定义临时zip文件 $filename = 'tmp.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"); //定义header头信息 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: " . filesize($filename)); Header("Content-Disposition: attachment; filename=文件.zip"); //一次只传输1024个字节的数据给客户端 $buffer = 1024; // while (!feof($file)) { //将文件读入内存 $file_data = fread($file, $buffer); //每次向客户端回送1024个字节的数据 echo $file_data; } //关闭文件 fclose($file); }
来源地址:https://blog.csdn.net/qq_39408664/article/details/126761570