当前位置: 首页 > news >正文

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

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

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.hskmm.com/?act=detail&tid=35059

相关文章:

  • ML-Summit2025|从游戏AI到工程机械,具身智能的实践与应用
  • SpringBoot使用TraceId日志链路追踪
  • 马尔可夫决策过程的理解
  • 2025年服装辅料厂家权威推荐榜:服饰辅料,全品类辅料,箱包辅料源头厂家精选,品质保障与创新设计深度解析
  • 逆向 | 逃离鸭科夫 frida hook 锁血
  • 2025 年球墨铸铁管厂家最新推荐榜:涵盖 K9/C 级供水等多规格,优质厂家选购指南 k9级球墨铸铁管/c25级球墨铸铁管/c30球墨铸铁管/c级球墨铸铁管厂家推荐
  • 2025年掘进机/综掘机厂家权威推荐榜:专业制造与技术实力深度解析,高效掘进设备优选指南
  • 洛谷P2474 [SCOI2008] 天平 题解
  • 一天一款实用的AI工具,第8期,AI转素描风格
  • 2025年预应力张拉设备厂家推荐排行榜,千斤顶,预应力千斤顶,预应力张拉千斤顶,预应力张拉机,锚具,预应力锚具,桥梁施工锚具公司精选
  • 完整教程:【C++】string类
  • 2025年智能防爆灯厂家推荐排行榜,工矿灯,防爆工矿灯,LED防爆灯,防爆照明灯具源头厂家精选
  • 关于理工男对文学作品——《倾城之恋》
  • 计算机网络 命令telnet ping curl详解
  • Visual Studio 2022连接mysql数据库2,实现一个表的CRUD
  • Cypress 插件实战:让你的测试不再“偶尔掉链子”
  • Telnet发送邮件
  • 2025年实验室/手术室净化工程厂家推荐排行榜:涵盖无尘车间装修、洁净室建设、医院净化工程等全方位解决方案精选
  • 第五周第五天5.5
  • 软件设计中的需求分析——白日梦
  • 2025 石家庄全屋定制工厂推荐:河北森佰特木业,莫兰迪色系/工业风/意式/意式极简/中古风/侘寂风/现代简约/北欧风/奶油胡桃色全屋定制等风格任你选
  • 2025 钢制拖链源头厂家最新推荐排行榜:权威甄选优质品牌,破解选型难题助力企业精准采购
  • 机器学习可扩展性:从1到百万用户的架构演进
  • SOSDP
  • 2025年保洁公司推荐排行榜,驻场保洁/钟点保洁/开荒保洁/外包保洁/商场保洁/办公楼保洁/工厂保洁/医院保洁/企业保洁服务优选指南
  • 联通光猫烽火吉比特HG6145F获取超级密码
  • DBA必备脚本:Oracle获取绑定变量的字面SQL文本版版本替代
  • Newtonsoft.Json笔记 -JToken、JObject、JArray详解
  • 2025 最新活动跟拍直播公司推荐榜:广告影视圈权威评选,揭秘五大高性价比品牌覆盖西安及全国市场,会展 / 企业 / 赛事场景优选
  • 2025 年宣传片拍摄制作公司最新推荐排行榜:覆盖多领域优质服务商,助企业精准选靠谱合作伙伴