fastadmin php批量生成文件并打包下载

//批量下载
    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(',')
});

下载文件名中不能含有,等特殊符号,否则会下载失败

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值