后台下载接口
| |
| |
| |
| |
| |
| |
| |
| @RequestMapping(value = "downloadManyFile", method = {RequestMethod.POST, RequestMethod.GET}) |
| public void downloadManyFile(HttpServletRequest request, HttpServletResponse response) throws Exception { |
| String zxwqTsId = RequestUtil.getString(request,"zxwqTsId"); |
| 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(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, |
| }); |
| |
| }); |
| }, |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具