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实现文件压缩处理详解的文章就介绍到这了,更多相关SpringBoot文件压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java获取两个集合List的交集、补集、并集(相加)和差集(相减)的几种方式
这篇文章主要介绍了Java获取两个集合List的交集、补集、并集(相加)和差集(相减)的几种方式,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下2025-04-04
Mybatis-plus 批量插入太慢的问题解决(提升插入性能)
公司使用的Mybatis-Plus操作SQL,用过Mybatis-Plus的小伙伴一定知道他有很多API提供给我们使用,但是批量插入大数据太慢应该怎么解决,本文就详细的介绍一下,感兴趣的可以了解一下2021-11-11
解决Mybatis中mapper.xml文件update,delete及insert返回值问题
这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-11-11
SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发2022-10-10
Spring中的@PostConstruct注解使用方法解析
这篇文章主要介绍了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用来处理在@Autowired注入属性后init()方法之前,对一些零散的属性进行赋值的注解,需要的朋友可以参考下2023-11-11
Java随机值设置(java.util.Random类或Math.random方法)
在编程中有时我们需要生成一些随机的字符串作为授权码、验证码等,以确保数据的安全性和唯一性,这篇文章主要给大家介绍了关于Java随机值设置的相关资料,主要用的是java.util.Random类或Math.random()方法,需要的朋友可以参考下2024-08-08


最新评论