Thinkphp5使用ZipArchive批量打包下载图片

thinkphp5中自带了ZipArchive,我们可以直接调用打包文件;
第一步: 因为是批量打包文件,所以我们需要传入数据id,我是在页面中使用js方法拼接的id字符串,所以在后台我需要explode将字符串转换为数组才可以,如果你们的方法与我的不一样,可省掉这一部分;
第二步: 循环id,查找要打包的文件路径,并且将所有的文件路径保存在同一个数组中(代码中的$files[]);
第三步: 参数解释:

$filename: 设置压缩文件的名称以及位置,这样我们下载的时候才能下载成功;
array_pop($files): 因为我拼接的ids格式为: 1,2,3,   后面多了一个, 所以我在转换为数组后需要将最后一个,去掉,这里是我根据情况使用的,如果你们没有这种情况,这部分则不需要,如果最后一个的空数组不去掉的话,在打包的时候会报错
public function download_files(){
		$param = $this->request->param();
	    $ids = explode(',', $param['ids']);
	    //要打包的文件
	    foreach ($ids as $k => $v){
	    	$files[] = Db::name('qrcode')->where('id',$v)->value('qrcode');
	    }
	    
	    $zip = new \ZipArchive;
	    //压缩文件名
	    $filename = 'uploads/qrcode/qrcode.zip';
	    //新建zip压缩包
	    $zip->open($filename,\ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE);
	    //循环压缩文件
	    array_pop($files);
	    foreach($files as $key => $value){
	    	$zip->addFile($value,basename($value));
	    }
	    //打包zip
	    $zip->close();
	    header("Cache-Control:public");
	    header("Content-Description: File Transfer");
	    header("Content-disposition: attachment; filename=".basename($filename));//文件名
		header("Content-Type:application/zip"); //格式为zip
		header("Content-Transfer-Encoding:binary"); //这是二进制文件
		header("Content-Length:".filesize($filename)); //文件大小
		@readfile($filename);
	}

来试试吧!!! 超级简单就可以打包下载了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值