尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

如何实现文件批量重命名后再进行批量打包下载
📅 发布时间:2026/6/20 9:51:53

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

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);}}

 

相关新闻

  • 曾国藩遗嘱 今将永别,特立四条以教汝兄弟。
  • 【IEEE出版】第五届测量控制与仪器仪表国际学术会议(MCAI 2025)
  • zedboard + AD-FMCOMMS3-EBZ AD9361 (六)gnuradio

最新新闻

  • 7月1日超龄用工新规落地,企业劳动合同管理必须跨过这道合规关
  • 微信网页版访问终极指南:wechat-need-web插件完整使用教程
  • OBS Spout2插件:打破Windows视频制作生态壁垒的专业级纹理共享技术方案
  • 白银市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 谊识预商贸
  • HS2-HF_Patch终极指南:Honey Select 2汉化去码增强补丁完全解析
  • 白银市闲置手表包包奢侈品变现,整理了5家靠谱回收店联系方式 - 谊识预商贸

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号