34345 发表于 2025-2-7 03:17:36

SpringBoot-文件压缩处理

前言

在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理;为了让大家进一步了解我先将springboot处理的方法总结如下,有不到之处敬请大家批评指正!
一、文件准备:

https://qnsc.oss-cn-beijing.aliyuncs.com/crmebimage/public/product/2024/11/12/be353210028a3da732c8ba34073fb4ca.jpeghttps://qnsc.oss-cn-beijing.aliyuncs.com/crmebimage/public/product/2024/11/13/5bbf579109db2641249deab4be4340f6.jpeghttps://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@Slf4jpublic 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];                        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@Slf4jpublic 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文件



 
页: [1]
查看完整版本: SpringBoot-文件压缩处理