浏览器文件下载

后台下载接口

/**
* 功能 :批量打包下载
*
* @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 @   牵我狗  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示