开发中,提到了批量下载文档的方法,但不是需要点击多次,逐个选择下载位置的批量下载,
而是类似于qq 邮箱的下载一个压缩文件,里面是是全部的需要下载的文件
话不多说,上代码;
这里,需要使用php的压缩扩展类 ZipArchive ,大致开了下类,需要要求php版本大于5.2
/*批量下载文档*/
public function betchdownload(){
//需要通过浏览器下载 是get请求 传入文档id集合
$ids = trim(I('ids'),',');
$ids = explode(',',$ids);
$filesArr = M('file')->where(['id'=>['in',$ids]])->field('filename,filepath')->select();
foreach ($filesArr as $key=>$val){
$filesArr[$key]['downpath'] = iconv("utf-8","gb2312", $val['filename']);//解决文件名乱码问题
}
$zipname = './files.zip';
//要使用该类,需要先启用 extension=php_zip.dll
$zip = new \ZipArchive ();
$res = $zip->open ( $zipname, \ZipArchive::CREATE );
if ($res === TRUE) {
foreach ( $filesArr as $file ) {
//这里将服务器上的文件添加到下载内容中,并重新赋值下载zip文件内该文件的路径
$zip->addFile ( $file ['filepath'], $file ['downpath']);
}
}
$zip->close ();
header('Content-Type: application/octet-stream');
header ( "Content-Type: application/zip" );
header ( "Content-Transfer-Encoding: Binary" );
header ( "Content-Length: " . filesize ( $zipname ) );
header ( "Content-Disposition: attachment; filename=\"" . basename ( $zipname ) . "\"" );
readfile ( $zipname );
//如不删除,则在服务器上会有 $zipname 这个zip文件
@unlink ( $zipname );
}
注:最开始下载的时候,解压缩会发现中文文件名称乱码,百度后,找到了解答方案;链接如下
http://ask.zol.com.cn/x/3193865.html
虽然只是个小功能,还是有成就感的。