如何批量重命名文件后再打包下载批量文件?
摘要:在项目中会遇到一些批量下载打包的简单功能,今天我们给大家分享一个:批量打包下载,且对打包的文件进行批量重名 1.表结构 字段名 备注 tutorial_id 教材ID turtorial_origin_name 源文件名 turtorial
在项目中会遇到一些批量下载打包的简单功能,今天我们给大家分享一个:批量打包下载,且对打包的文件进行批量重名
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>>>());
// 创建临时目录存
