如何实现文件批量重命名后再进行批量打包下载

news/2025/10/20 15:55:00/文章来源:https://www.cnblogs.com/liuyangjava/p/19152852

在项目中会遇到一些批量下载打包的简单功能,今天我们给大家分享一个:批量打包下载,且对打包的文件进行批量重名

1.表结构

字段名 备注
tutorial_id 教材ID
turtorial_origin_name 源文件名
turtorial_upload_name 存储文件名
turtorial_upload_path 存储路径
turtorial_sort 教材排序

2.功能描述

(1)库表存储的文件以“turtorial_upload_name”为标准,文件名称随机生成的uuid

(2)当批量下载文件,其打包文件名字根据“turtorial_upload_name”命名

问题:如果我们需要在进行打包下载之前修改文件名称为“源文件名”,程序应该如何实现

3.初期代码实现

(1)依赖包:hutool

(2)工具类:cn.hutool.core.util.ZipUtil

(3)实现基本思路:

  • 获取多个教材的路径,封装到File中
  • 设置文件压缩的路径,此路径为临时下载路径
  • 创建ZipUtil对象,封装多个教材的File对象
  • IO流传输
  • 删除临时

初期代码参考

    public void donwloadTutorial(String fileName, String paramJson, HttpServletResponse response) throws IOException {// 返回json字符串为集合,通过TypeReference进行类型转换List<Map<String,String>> param = JsonFactory.json2bean(paramJson, new JsonFactory.TypeReference<List<Map<String,String>>>());List<File> fileList = new ArrayList<>();// 获取教材的路径for (Map<String, String> map : param) {String tutorialUploadPath = map.get("tutorialUploadPath");String filePath = downloadPath + tutorialUploadPath;fileList.add(FileUtil.file(filePath));}// 文件压缩,并保存到临时路径File zipFile = new File(downloadPath + "achive.zip");ZipUtil.zip(zipFile, false, fileList.toArray(new File[fileList.size()]));InputStream is = new FileInputStream(zipFile);ResponseExportUtil.exportFileWithStream(response, is, fileName);is.close();// 删除临时文件FileUtil.del(zipFile);}

4.优化代码,完成文件重名再打包下载

基本思路:

  • 创建临时目录,存放重命名后的文件
  • 获取教材的路径
  • 复制并覆盖同名文件
  • 文件压缩,并保存到临时路径
  • 发送压缩文件
  • 删除临时文件

优化后代码参考

 

    public void donwloadTutorial(String fileName, String paramJson, HttpServletResponse response) throws IOException {// 返回json字符串为集合,通过TypeReference进行类型转换List<Map<String,String>> param = JsonFactory.json2bean(paramJson, new JsonFactory.TypeReference<List<Map<String,String>>>());// 创建临时目录存放重命名后的文件File tempDir = FileUtil.mkdir(downloadPath + "/temp/" + "tutorial_download_" + System.currentTimeMillis());List<File> renamedFiles = new ArrayList<>();File zipFile = new File(downloadPath + "achive.zip"); // 压缩文件临时存储名称try {// 获取教材的路径for (Map<String, String> map : param) {String tutorialUploadPath = map.get("tutorialUploadPath"); // 教材上传路径String tutroialOriginName = map.get("tutorialOriginName"); // 教材原始名称// 验证原始文件名非空且合法if (StrUtil.isBlank(tutroialOriginName)) {throw new IllegalArgumentException("原始文件名不能为空");}tutroialOriginName = FileUtil.cleanInvalid(tutroialOriginName); // 清理非法字符String filePath = downloadPath + tutorialUploadPath; // 源文件的路径, 例如, /data/upload/course_content/tutorial/pdf/2023-05-05/1.pdfFile sourceFile = FileUtil.file(filePath); // 源文件,存储在数据库上的真实路径if (!sourceFile.exists()) {throw new FileNotFoundException("文件不存在: " + sourceFile.getPath());}// 在临时目录创建重命名后的文件File renamedFile = FileUtil.file(tempDir, tutroialOriginName); // 在临时目录创建重命名后的文件FileUtil.copy(sourceFile, renamedFile, true); // 复制并覆盖同名文件renamedFiles.add(renamedFile);}// 文件压缩,并保存到临时路径ZipUtil.zip(zipFile, false, renamedFiles.toArray(new File[renamedFiles.size()]));// 发送压缩文件try (InputStream is = new FileInputStream(zipFile)) {ResponseExportUtil.exportFileWithStream(response, is, fileName);}} finally {// 删除临时文件FileUtil.del(tempDir);FileUtil.del(zipFile);}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shiyan 2

shiyan 2实验任务一1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 5 #define N 56 #define N1 807 #define N2 358 int main(){9 int cnt; 10 int random_major,random_n…

曾国藩遗嘱 今将永别,特立四条以教汝兄弟。

曾国藩遗嘱 今将永别,特立四条以教汝兄弟。曾国藩遗嘱 曾国藩遗嘱[清]曾国藩2024-11-21 余通籍三十余年,官至极品,而学业一无所成,德行一无可许,老人徒伤,不胜悚惶惭赧。今将永别,特立四条以教汝兄弟。一曰慎独…

【IEEE出版】第五届测量控制与仪器仪表国际学术会议(MCAI 2025)

由广东省测量控制技术与装备应用促进会、广州市仪器仪表学会联合主办,广东计量测试学会、AEIC学术交流中心协办的第五届测量控制与仪器仪表国际学术会议(MCAI 2025)将于2025年11月14-16日在广州召开。会议将围绕测量…

2025年氢氧化镁厂家推荐排行榜,矿石氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁源头企业深度解析

2025年氢氧化镁厂家推荐排行榜,矿石氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁源头企业深度解析 一、氢氧化镁行业发展趋势分析 氢氧化镁作为一种重要的无机化工原料,在阻燃材料、环保处理、医药制造等…

Debian13.1.0最新镜像迅雷下载

​对Linux用户、企业运维人员或开发者来说,想装Debian最新稳定版却怕踩坑?找镜像怕被篡改、下载慢到抓狂、安装后遇到问题没人帮?别担心,云修网(http://www.mvday.com/fun/244.html)早已为你备好Debian13.1.0(代…

ML-Summit2025|从游戏AI到工程机械,具身智能的实践与应用

10月16–17日,由CSDN与奇点智能研究院联合举办的2025全球机器学习技术大会于北京召开,全球顶级学者与产业领袖齐聚一堂,大会涵盖具身智能与智能硬件、AI Infra大模型基础设施、AI赋能软件研发与氛围编程、大模型+行…

【数据结构】二叉树的高频热门面试题大全 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年服装辅料厂家权威推荐榜:服饰辅料,全品类辅料,箱包辅料源头厂家精选,品质保障与创新设计深度解析

2025年服装辅料厂家权威推荐榜:服饰辅料,全品类辅料,箱包辅料源头厂家精选,品质保障与创新设计深度解析 行业背景与发展趋势 服装辅料行业作为纺织服装产业链的重要环节,正经历着深刻的变革与升级。随着消费升级和…

为什么Redis的执行是原子性的,怎么保证原子性的

为什么Redis的执行是原子性的,怎么保证原子性的2025-10-20 15:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

逆向 | 逃离鸭科夫 frida hook 锁血

逆向 | 逃离鸭科夫锁血hook 赶时间,随便用frida搓了一个,原理是先通过hook找血量地址,再导出函数进行使用。 python端: from __future__ import print_function # 这里__future__的目的是引入新版本特性 import…

zedboard + AD-FMCOMMS3-EBZ AD9361 (六)gnuradio

zedboard + AD-FMCOMMS3-EBZ AD9361 (六)gnuradio1、官网:GNU Radio2、简介:What Is GNU Radio - GNU Radio3、帮助文档:GNU Radio

CF2109D D/D/D

可以重复走就说明这题是一个乱搞题。 显然,花一些步数走到 \(i\) 后,剩余的步数可以来回跳,分类讨论一下奇偶性即可。 记录一个 \(f_{x, 0/1}\) 表示从 \(1\) 到 \(x\),奇数/偶数步的最短路分别是多少。 分类讨论有…

SpringBoot使用TraceId日志链路追踪

业务需求保证一次服务调用,在业务中可以一次追查到本次服务调用涉及的本地服务方法,第三方服务接口。实现日志的链路追踪。保证日志的高查找性。实现步骤1、pom.xml 依赖<dependencies><dependency><…

马尔可夫决策过程的理解

核心性质:马尔可夫性:一个随机过程在给定现在状态和所有历史状态的情况下,其未来状态的条件概率分布仅依赖于当前状态。即未来的转移和过去是独立的,只取决于现在。马尔可夫决策过程 是顺序决策问题的数学模型,用…

2025年试验机厂家权威推荐榜单:拉力试验机,江都试验机,管材环刚度试验机,电子万能试验机,橡胶试验机,压缩试验机及静刚度试验机精选

2025年试验机厂家权威推荐榜单:拉力试验机,江都试验机,管材环刚度试验机,电子万能试验机,橡胶试验机,压缩试验机及静刚度试验机精选 在材料科学与工业制造领域,试验机作为质量控制与研发创新的关键设备,其性能…

2025 年球墨铸铁管厂家最新推荐榜:涵盖 K9/C 级供水等多规格,优质厂家选购指南 k9级球墨铸铁管/c25级球墨铸铁管/c30球墨铸铁管/c级球墨铸铁管厂家推荐

引言 在城市给排水、跨区域输水等重大基础设施建设中,球墨铸铁管的质量直接关系到工程安全与使用寿命。当前市场品牌繁杂,既有技术领先的老牌企业,也有快速崛起的新兴力量,部分产品存在壁厚不均、防腐性能不达标等…

Cypress 插件实战:让你的测试不再“偶尔掉链子”

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 对于测试开发来说,最头疼的莫过于 flaky tests——同一条测试,有时候过,有时候失败,还没规律。今天我们就聊聊如何用 自定义 Cypress 插…

2025年掘进机/综掘机厂家权威推荐榜:专业制造与技术实力深度解析,高效掘进设备优选指南

2025年掘进机/综掘机厂家权威推荐榜:专业制造与技术实力深度解析,高效掘进设备优选指南 在矿山开采和隧道工程建设领域,掘进机和综掘机作为核心装备,其性能与可靠性直接影响工程效率与安全。随着技术进步和市场需求…

洛谷P2474 [SCOI2008] 天平 题解

思路学习的这一篇 step1 首先我们设 \(mn_{i,j}\)为砝码 \(i\) -砝码 \(j\) 的最小值(下文以\(a_i\)和\(a_j\)代替)。 \(mx_{i,j}\)为\(a_i-a_j\)的最大值。 当设\(a_i\)和\(a_j\)的关系为\(g_{i,j}\)。 当\(g_{i,j}\)…

Telnet发送邮件

Telnet发送邮件Telnet mail.yy.com 25EHLO domain.com MAIL FROM:<your-email@example.com> RCPT TO:<recipient@example.com>DATA #开始输入邮件主题和正文 Subject: Test EmailThis is a test email. .…