//批量下载
public function downloadAll(){
$ids=input('ids');
$row=$this->model->with(['user','course'])->where('results.id','in',$ids)->field('results.*,user.nickname,course.title')->select();
if(!$row){
$this->error('记录不存在');
}
$arr=[];
foreach ($row as $item){
$path = $item['nickname'].':【'.$item['title']."】实验报告_".$item['id'].".doc";
createWord($path,$item['nr']);//$item['nr']是富文本字符串
$arr[]=$path;
}
//下载文件名中不能含有,等特殊符号,否则会下载失败
$zipname = '实验报告['.str_replace(',','_',$ids).']'.date('YmdHis').'.zip';
zipFile($arr, $zipname);
foreach($arr as $item){
unlink($item);
}
//发送到浏览器
\fast\Http::sendToBrowser($zipname);
}
/**
* 生成Word文档
* @param $path string 保存位置
* @param $html string HTML字符串
*/
function createWord($path,$html){
ob_start();
echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
echo $html;
echo "</html>";
$data = ob_get_contents();
ob_end_clean();
file_put_contents($path,$data);
}
//放到公共函数中common.php,否则ZipArchive()会报错
//压缩单个文件
function zipFile($Path, $outZipPath){
$z = new ZipArchive();
$z->open($outZipPath, ZIPARCHIVE::CREATE);
foreach ($Path as $item){
$z->addFile($item);
}
$z->close();
}
对应js文件
//批量下载报告
$(document).on("click", ".btn-download", function () {
var selectedrow = table.bootstrapTable('getSelections');
if(selectedrow.length<1){
Toastr.error('未选择任何记录,不能下载!');
return;
}
var ids = [];
for(var i=0;i<selectedrow.length;i++){
ids[i] = selectedrow[i].id;// 遍历选择记录
}
location.href='results/downloadAll?ids='+ids.join(',')
});
下载文件名中不能含有,等特殊符号,否则会下载失败