代码是按照我需要的内容编写的,里面有注释,可以按照注释修改为自己需要的内容。
/**
* 多文件下载 Thinkphp5.0+
*/
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);
}