当前位置:   article > 正文

使用Spring Boot进行文件压缩_springboot 文件打包加密压缩文件

springboot 文件打包加密压缩文件

本文讲解如何使用Java Spring Boot框架实现文件压缩和删除功能。

微信搜索关注《Java学研大本营》

图片

1 简介

你知道在Java应用程序中优化文件服务器的磁盘空间是非常重要的非功能性要求之一吗?如果管理得当,可以节省文件存储服务器上60%至70%的成本。因此,对于由Java Spring Boot API生成的数据文件进行压缩显得尤为非常重要。

Java提供了多个库来帮助我们压缩内容,同时也提供了本地文件操作来压缩数据文件。在本文中,我们使用本地方法来实现压缩。

2 使用Java实现文件压缩和删除功能

我们创建一个实用程序,它可以打包在Java代码的任何位置,可以在你的微服务中的任何地方使用。你还可以将其放在共享库中,作为组织中所有微服务的实用程序公开。我们的实用程序将具有两个功能:

  • 压缩给定的源文件

  • 在压缩成功后删除原始文件

先决条件:

JDK ≥ 1.8 + Maven > 3.X + Spring Boot 2.X + Lombok + Common-IO

我们创建一个对象,该对象将具有基本参数用于压缩文件。在下面的代码中,我们创建了一个名为FileZipper类,它通过Lombok实现Builder和Getter功能。

  1. @Builder(setterPrefix = "set")
  2. @Getter
  3. public class FileZipper {
  4.  @NonNull
  5.  private String sourceFilePath;
  6.  @NonNull
  7.  private String sourceFileName;
  8.  @NonNull
  9.  private String sourceFileExtension;
  10.  @NonNull
  11.  private String zippedFilePath;
  12.  @NonNull
  13.  private String zippedFileName;
  14.  private boolean deleteSourceAfterZipped;
  15. }

现在,我们创建一个名为FileZippingService的Java服务类,它将根据用户输入压缩源文件。此服务类还具有文件删除功能,可以在文件压缩成功后删除源文件。

  1. public class FileZippingService {
  2.  private static final String DOT = ".";
  3.  private static final String ZIP = ".zip";
  4.  private FileZippingService() {
  5.  }
  6.  static Logger logger = LoggerFactory.getLogger(FileZippingService.class);
  7.  /**
  8.   * Method to Zip a file
  9.   * 
  10.   * @param fileZipper
  11.   */
  12.  public static void zipExportFile(FileZipper fileZipper) {
  13.   String sourceFileWithPath = fileZipper.getSourceFilePath().concat(fileZipper.getSourceFileName()).concat(DOT)
  14.     .concat(fileZipper.getSourceFileExtension());
  15.   String zippedFileWithPath = fileZipper.getZippedFilePath().concat(fileZipper.getZippedFileName()).concat(ZIP);
  16.   logger.info("Source File : {} will be zipped into {}", sourceFileWithPath, zippedFileWithPath);
  17.   try {
  18.    File fileToZip = new File(sourceFileWithPath);
  19.    if (fileToZip.exists()) {
  20.     FileOutputStream fos = new FileOutputStream(zippedFileWithPath);
  21.     ZipOutputStream zipOut = new ZipOutputStream(fos);
  22.     FileInputStream fis = new FileInputStream(fileToZip);
  23.     ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
  24.     zipOut.putNextEntry(zipEntry);
  25.     byte[] bytes = new byte[1024];
  26.     int length;
  27.     while ((length = fis.read(bytes)) >= 0) {
  28.      zipOut.write(bytes, 0length);
  29.     }
  30.     zipOut.close();
  31.     fis.close();
  32.     fos.close();
  33.     logger.info("{} zipped successfully at {}", sourceFileWithPath, zippedFileWithPath);
  34.     if (fileZipper.isDeleteSourceAfterZipped())
  35.      deleteFile(sourceFileWithPath);
  36.    }
  37.   } catch (IOException e) {
  38.    logger.error("Error while Zipping the file", e);
  39.    deleteFile(zippedFileWithPath);
  40.   }
  41.  }
  42.  /**
  43.   * Method to delete a file at given path
  44.   * 
  45.   * @param fileToDelete
  46.   */
  47.  private static void deleteFile(String fileToDelete) {
  48.   File filetoDelete = new File(fileToDelete);
  49.   if (filetoDelete.exists()) {
  50.    if (FileUtils.deleteQuietly(filetoDelete)) {
  51.     logger.info("{} deleted successfully.", fileToDelete);
  52.    } else {
  53.     logger.info("{} deletion unsuccessfull.", fileToDelete);
  54.    }
  55.   } else {
  56.    logger.info("{} was not found for deletion.", fileToDelete);
  57.   }
  58.  }
  59. }

接下来我们通过运行Spring Boot应用程序来测试代码。在下面的Java文件中,你可以看到提供的源文件路径、名称和扩展名,从中需要读取文件;还提供了压缩文件的文件名以及压缩后需要存储的路径。此外,这里还设置了一个标志,用于决定是否在压缩后删除源文件。

  1. @SpringBootApplication
  2. public class FileZippingApplication {
  3.  public static void main(String[] args) {
  4.   SpringApplication.run(FileZippingApplication.class, args);
  5.   FileZipper fileZipper = FileZipper.builder()
  6.     .setSourceFilePath("C:/Data/")
  7.     .setSourceFileName("UserData")
  8.     .setSourceFileExtension("xlsx")
  9.     .setZippedFileName("ZippedUserData")
  10.     .setZippedFilePath("C:/Data/")
  11.     .setDeleteSourceAfterZipped(true)
  12.     .build();
  13.   FileZippingService.zipExportFile(fileZipper);
  14.  }
  15. }

3 结果

上述代码的输出结果令人非常惊讶。在我们的一个业务应用程序中,有大量的CSV文件,大小一般在600MB到1 GB之间,占用消耗大量的磁盘空间,因为我们在一个小时内收到了1000多个请求。

但是,在使用上述代码压缩后,磁盘空间减少了85%,我们甚至可以通过电子邮件向客户发送文件。

推荐书单

IT BOOK 多得(点击查看5折活动书单)icon-default.png?t=N7T8https://u.jd.com/psx2y1M

《微服务设计模式和最佳实践》

本书详细阐述了与微服务相关的基本解决方案,主要包括微服务概念、微服务工具、内部模式、微服务生态环境、共享数据微服务设计模式、聚合器微服务设计模式、代理微服务设计模式、链式微服务设计模式、分支微服务设计模式、异步消息微服务、微服务间的协同工作、微服务测试以及安全监测和部署方案等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

《微服务设计模式和最佳实践》icon-default.png?t=N7T8https://item.jd.com/12592732.html

图片

精彩回顾

使用IntelliJ IDEA的代码样式功能,编写美观又简洁的代码

轻松实现在K8S上部署Spring Boot应用(下)

轻松实现在K8S上部署Spring Boot应用(上)

10个不容错过的VSCode插件(下)

10个不容错过的VSCode插件(上)

长按关注《Java学研大本营》

长按访问【IT今日热榜】,发现每日技术热点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/984604
推荐阅读
相关标签
  

闽ICP备14008679号