根据若依系统+minio实现批量下载附件并自动压缩成zip

效果实现:

 

 

分割!!!!

以下代码参考于

http://t.csdn.cn/4dUmDwg

话不多说 直接从后端开始

0.首先是pom依赖

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
1.后端Controller

ids和tableName为我业务需要(主要是查询数据库的附件表)

/**
* 下载多个文件转zip压缩包
* @param ids
* @param tableName
* @param response
* @throws Exception
*/
@RequestMapping("/dowloadToZip/{ids}/{tableName}")
public void dowloadToZip(@PathVariable Long[] ids,@PathVariable String tableName,HttpServletResponse response) throws Exception {
fileService.dowloadToZip(ids,tableName,response);
}
2.Service实现层

需要各位自己搜索minio关于下载的代码 也就是获取图片的inputStream流(因为各自代码逻辑不同)


/**
* 下载多个文件转zip压缩包
*
* @param ids
* @param tableName
* @param response
* @throws Exception
*/
@Override
public void dowloadToZip(Long[] ids, String tableName, HttpServletResponse response) throws Exception {
for (Long id : ids) {
int i = 0;
List<Attachment> attachments = attachmentService.attachmentSearch(id.toString(), tableName);
//如果有附件 进行zip处理
if (attachments != null && attachments.size() > 0) {
//被压缩文件流集合
InputStream[] srcFiles = new InputStream[attachments.size()];
//被压缩文件名称
String[] srcFileNames = new String[attachments.size()];
for (Attachment attachment : attachments) {
//以下代码为获取图片inputStream
String url = attachment.getUrl();
String[] names = url.split("/");
String name = tableName + "/" + names[names.length - 1];
GetObjectArgs args = GetObjectArgs.builder().bucket(minioConfig.getBucketName()).object(name).build();
InputStream inputStream = client.getObject(args);
if (inputStream == null) {
continue;
}
//塞入流数组中
srcFiles[i] = inputStream;
srcFileNames[i] = attachment.getAttachmentName();
i++;
}
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载.zip", "UTF-8"));
//多个文件压缩成压缩包返回
ZipUtil.zip(response.getOutputStream(), srcFileNames, srcFiles);
}

}
}
后端到这里就结束了,主要注意两个地方

1. ZipUtil是用pom导入依赖

2. 需要各自补充获取图片inputStream的代码 然后放入InputStream[]这个数组中即可

 

再其次回到前端

前端方面更简单

1. 找到前端项目的request.js 查看是否有download方法

 

如果有这个方法就简单 没有的话 各位自己copy吧!

2.找到 button批量下载证件 按钮 赋值@click="zipDownload" 并实现download代码块

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_44780971/article/details/129985854

posted @ 2024-05-28 17:31  枫树湾河桥  阅读(1120)  评论(0编辑  收藏  举报
Live2D