浏览器文件下载

后台下载接口

/**
     * 功能 :批量打包下载
     *
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping(value = "downloadManyFile", method = {RequestMethod.POST, RequestMethod.GET})
    public void downloadManyFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String zxwqTsId = RequestUtil.getString(request,"zxwqTsId"); //征信维权投诉id
        Assert.hasLength(zxwqTsId, "参数zxwqTsId丢失!");

        Map<String, Object> params = new HashMap<>();
        params.put("dataEnable", ZxwqClgc.DATA_ENABLE_YES);
        params.put("zxwqTsId", zxwqTsId);
        params.put("clrLx", ZxwqClgc.CLR_TYPE_ORG);
        List<ZxwqClgc> zxwqClgcList = zxwqClgcService.getAll(params);
        
        List<ZipUtils.FileByteZipInfo> fileByteZipInfoList = new ArrayList<>();
        if (zxwqClgcList != null && zxwqClgcList.size() > 0) {
            for (ZxwqClgc oneZxwqClgc : zxwqClgcList) {
                String clFjPath = oneZxwqClgc.getClFjPath();
                String clPdfPath = oneZxwqClgc.getClPdfPath();
                Date clSj = oneZxwqClgc.getClSj();
                String preName = "机构["+oneZxwqClgc.getClrXm()+"]在"+DateUtilsExt.date2String(clSj, "yyyyMMddHHmmss")+"上传的资料";
                if(!StringUtils.isEmpty(clFjPath)){
                    String[] clFjPathAry = clFjPath.split(",");
                    if(clFjPathAry != null && clFjPathAry.length > 0){
                        for(int i=0; i<clFjPathAry.length; i++){
                            byte[] bytes = fastDFSClient.downloadFile(clFjPathAry[i]);
                            if (bytes != null) {
                                ZipUtils.FileByteZipInfo fileByteZipInfo = new ZipUtils.FileByteZipInfo();
                                fileByteZipInfo.setBytes(bytes);
                                fileByteZipInfo.setZipEntryName("图片附件_"+(i+1)+"."+FileUtilsExt.getExt(clFjPathAry[i]));
                                fileByteZipInfo.setRootEntryName(preName);
                                fileByteZipInfoList.add(fileByteZipInfo);
                            }
                        }
                    }
                }
                if(!StringUtils.isEmpty(clPdfPath)){
                    String[] clPdfPathAry = clPdfPath.split(",");
                    if(clPdfPathAry != null && clPdfPathAry.length > 0){
                        for(int i=0; i<clPdfPathAry.length; i++){
                            byte[] bytes = fastDFSClient.downloadFile(clPdfPathAry[i]);
                            if (bytes != null) {
                                ZipUtils.FileByteZipInfo fileByteZipInfo = new ZipUtils.FileByteZipInfo();
                                fileByteZipInfo.setBytes(bytes);
                                fileByteZipInfo.setZipEntryName("文档附件_"+(i+1)+"."+FileUtilsExt.getExt(clPdfPathAry[i]));
                                fileByteZipInfo.setRootEntryName(preName);
                                fileByteZipInfoList.add(fileByteZipInfo);
                            }
                        }
                    }
                }
            }
        }
        if (fileByteZipInfoList == null || fileByteZipInfoList.size() == 0) {
            this.write("<script>alert('此记录未找到下载的文件!');window.close();</script>", response);
            return;
        }
        String zipFileName = "机构处理过程上传的附件.zip";
        String tempZipFolder = FileUtilsExt.contactPath(
                                FileUtilsExt.getSysFileTempPath(),
                                DateUtilsExt.date2String(new Date(), "yyyy-MM-dd"),
                                UniqueIdUtil.genUUID());
        FileUtilsExt.getSafeFolder(new File(tempZipFolder));
        String tempZipFilePath = FileUtilsExt.contactPath(tempZipFolder, zipFileName);
        ZipUtils.doZip(fileByteZipInfoList, tempZipFilePath, true);
        FileUtilsExt.download(tempZipFilePath, response, zipFileName);
    }

总结

1. html 携带token和要请求的数据ID去请求接口
2. 后端从fastDFS 中获取文件,bite流使用zip工具写入文件

前端接口

success: function (res) {
        //必须用util.wxSuccess对错误统一处理
        util.wxSuccess(res, function () {
          var returnMap = res.data.result;
          var batchExportFilesUrl = util.tomcatUrl + '/udp/qyzxcx'+ returnMap.batchExportFilesUrl+'?identityFlag=YingHang'+"&userIdList="+returnMap['userIdList']+'&companyUserToken='+util.getTokenValue();
          that.setData({
            dataMap:returnMap,  
            orgName:returnMap['zxwqShareDoc'][0].receiveOrgName,
            batchExportFilesUrl: batchExportFilesUrl,
          });

        });
      },
posted @ 2020-10-30 21:48  莲花住相  阅读(197)  评论(0编辑  收藏  举报