springboot将文件处理成压缩文件
前言
在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理;为了让大家进一步了解我先将springboot处理的方法总结如下,有不到之处敬请大家批评指正!
一、文件准备:
https://qnsc.oss-cn-beijing.aliyuncs.com/crmebimage/public/product/2024/11/12/be353210028a3da732c8ba34073fb4ca.jpeg
https://qnsc.oss-cn-beijing.aliyuncs.com/crmebimage/public/product/2024/11/13/5bbf579109db2641249deab4be4340f6.jpeg
https://qnsc.oss-cn-beijing.aliyuncs.com/crmebimage/public/product/2024/11/13/1808773678128361474.xlsx
二、处理步骤:
1.创建一个springboot web项目 这一步在此省略.....
2.需要的方法及类的编写
(1)业务方法-TestService
public interface TestService {
void compressFiles(List<String> fileUrls, HttpServletResponse response);
}
(2)业务方法实现类-TestServiceImpl
@Service
@Slf4j
public class TestServiceImpl implements TestService { @Override
public void compressFiles(List<String> fileUrls, HttpServletResponse response) {
try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {
for (String fileUrl : fileUrls) {
// 1.从网络下载文件并写入 ZIP
try {
URL url = new URL(fileUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
// 2.检查响应码
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException("Failed to download file: " + fileUrl);
}
// 3.从 URL 中提取文件名
String pathStr = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);
// 4.创建 ZIP 条目
ZipEntry zipEntry = new ZipEntry(pathStr);
zipOut.putNextEntry(zipEntry);
// 5.读取文件的输入流
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream())) {
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) >= 0) {
zipOut.write(buffer, 0, length);
}
}
zipOut.closeEntry();
} catch (IOException e) {
log.error("Error processing file URL: " + fileUrl, e);
throw new RuntimeException(e);
}
}
// 6.响应信息设置处理
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=test.zip");
response.flushBuffer();
} catch (IOException e) {
log.error("Error compressing files", e);
throw new RuntimeException(e);
}
}
}
(3)控制器类的编写-TestController
/**
* @Project:
* @Description:
* @author: songwp
* @Date: 2024/11/13 14:50
**/
@RequestMapping("test")
@RestController
@Slf4j
public class TestController { @Autowired
private TestService testService; /**
* 文件压缩
*
* @param fileUrls 要压缩的文件 URL 列表
* @param response 响应对象
*/
@GetMapping("/fileToZip")
public void zip(@RequestParam("fileUrls") List<String> fileUrls, HttpServletResponse response) {
testService.compressFiles(fileUrls, response);
}
}
三、方法调用展示

(1)存放到桌面

(2)解压response.zip文件


springboot将文件处理成压缩文件的更多相关文章
- 使用宏批量将多个csv文件转成excel文件
在一个压缩文件中有100多个csv文件,要求要将此100多个csv文件转成excel文件,名字命名不变,有三种方式: 1. 傻不拉几的复制粘贴法 2. 一个一个打开csv文件,另存为xls文件,工作量 ...
- [python]自动化将markdown文件转成html文件
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- java 压缩文件 传入文件数组,压缩文件,在指定路径下生成指定文件名的压缩文件
/** * 传入文件数组,压缩文件,在指定路径下生成指定文件名的压缩文件 * * @param files * 文件数组 * @param strZipName * 压缩文件路径及文件名 * @thr ...
- [转载]webarchive文件转换成htm文件
原文地址:webarchive文件转换成htm文件作者:xhbaxf Mac OS X系统带有文件转换功能,可以把webarchive文件变成html文件.方法是: Step 1: 建立一个文件夹 ...
- 自制 Python小工具 将markdown文件转换成Html文件
今天看到了一个Python库,名为markdown.瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具. 我的实验环境 操作系统: Windows 7 64位 旗舰版 ...
- C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件
比如我要把TestDLL.cs文件编译成dll文件,则在命令提示符下,输入下面的命令,生成的文件为TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安装 ...
- 将 Python3 文件打包成 exe 文件
我们用 Python 写好的代码,如何给别人在没有配置 Python 环境的情况下直接使用呢?尤其是面向 windows 众. 因为 Python 是一门解释性的语言,离开了 Python 解释器,P ...
- 用gulp把less文件编译成css文件
第一次使用gulp构建工具,使用gulp将.less文件编译成.css文件并输出.根据视频做了笔记.提供新手和自己以后做参考. HTML文件 <!DOCTYPE html> <htm ...
- C#.NET如何将cs文件编译成dll文件 exe文件 如何调用dll文件
比如我要把TestDLL.cs文件编译成dll文件,则在命令提示符下,输入下面的命令,生成的文件为TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安装 ...
- 在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性
在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性 Maven 项目生成jar运行时提示“没有主清单属性” 新建了一个Maven的项目,mvn compile和mvn packag ...
随机推荐
- 什么?!90%的ThreadLocal都在滥用或错用!
最近在看一个系统代码时,发现系统里面在使用到了 ThreadLocal,乍一看,好像很高级的样子.我再仔细一看,这个场景并不会存在线程安全问题,完全只是在一个方法中传参使用的啊!(震惊) 难道是我水平 ...
- 学习设计微服务:api认证
前言最近再学习微服务,所以把自己的个人站点https://www.ttblog.site/拆分成微服务.目前正在思考微服务里面的认证与授权,网上百度到都是根据用户名和密码来实现的,考虑到实际的原因,我 ...
- Mac 删除 Steam 游戏图标
Steam 将游戏安装在了 ~/Applications,打开访达,前往该目录,将相关游戏移到废纸篓.
- 一文搞懂 == 、equals和hashCode
面试的时候,经常会被问到==和equals()的区别是什么?以及我们也知道重写equals()时候必须重新hashCode().这是为什么?既然有了hashCode()方法了,JDK又为什么要提供eq ...
- Innodb 单表索引查询和连接查询效率分析
一.MySQL查询访问方法 mysql执行查询语句的方式叫做访问方法或访问类型,这些访问类型具体为 const.ref.range.index.all等. 同一个查询语句可以使用多种不同的访问方法来执 ...
- VS Code 修改默认插件安装位置
先将扩展插件extensions从默认安装路径剪切到你真正想要存放的位置 将C:\Users\(用户名)\.vscode\extensions\剪切到存放的位置,此处以D:\extensions为例 ...
- 微信小程序--云开发支付闭环
云开发支付流程闭环 extends 微信小程序--使用云开发完成支付闭环 在上述文章中,我们对支付结果的处理更多依赖于小程序端的操作 订单号存储在小程序端 支付结果采用小程序端定时触发器轮询 现在我对 ...
- 城市时空预测的统一数据管理和综合性能评估 [实验、分析和基准]《Unified Data Management and Comprehensive Performance Evaluation for Urban Spatial-Temporal Prediction [Experiment, Analysis & Benchmark]》
2023年11月1日,还有两个月,2023年就要结束了,希望在结束之前我能有所收获和进步,冲呀,老咸鱼. 论文:Unified Data Management and Comprehensive Pe ...
- @vue/cli eslint插件使用指南
使用步骤 使用 npm 安装 @vue/cli-service 版本对应的 @vue/cli-plugin-eslint 例如:"@vue/cli-service": " ...
- SpringMVC —— 请求参数(传递json数据)
接收请求中的json数据 注解 json格式(POJO) json数组(POJO) @RequestBody与@RequestParam区别