前言

在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理;为了让大家进一步了解我先将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 interfaceTestService {void compressFiles(List<String>fileUrls, HttpServletResponse response);
}
(2)业务方法实现类-TestServiceImpl
@Service
@Slf4j
public class TestServiceImpl implementsTestService {

@Override
public void compressFiles(List<String>fileUrls, HttpServletResponse response) {try (ZipOutputStream zipOut = newZipOutputStream(response.getOutputStream())) {for(String fileUrl : fileUrls) {//1.从网络下载文件并写入 ZIP try{
URL url
= newURL(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 = newZipEntry(pathStr);
zipOut.putNextEntry(zipEntry);
//5.读取文件的输入流 try (InputStream inputStream = newBufferedInputStream(connection.getInputStream())) {byte[] buffer = new byte[1024];intlength;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 newRuntimeException(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 newRuntimeException(e);
}
}
}
(3)控制器类的编写-TestController
/*** @Project:
* @Description:
*
@author: songwp
* @Date: 2024/11/13 14:50
*
*/@RequestMapping("test")
@RestController
@Slf4j
public classTestController {

@Autowired
privateTestService testService;/*** 文件压缩
*
*
@paramfileUrls 要压缩的文件 URL 列表
*
@paramresponse 响应对象*/@GetMapping("/fileToZip")public void zip(@RequestParam("fileUrls") List<String>fileUrls, HttpServletResponse response) {
testService.compressFiles(fileUrls, response);
}
}

三、方法调用展示

(1)存放到桌面

(2)解压response.zip文件

标签: none

添加新评论