当前位置: 首页 > news >正文

springboot 文件处理框架

-------------------------------------------------------------------------------------------

 

Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:

 

    • EasyExcel:是阿里巴巴开源的基于 Java 的 Excel 处理工具。它重写了 POI 对 Excel 的解析方式,采用事件驱动模式和增量解析的方式,逐行解析 Excel 数据,不会将整个文件加载到内存中,内存占用可以控制在 KB 级别,完美解决了大数据量 Excel 处理时的内存溢出问题。此外,其 API 简洁易用,通过注解即可完成 Excel 与实体类的映射,还支持多种 Excel 格式以及复杂表头、合并单元格等复杂场景。
    • EEC(Excel Export Core):一款轻量且高效的 Excel 读写工具,专为解决大数据量、高并发场景下的 Excel 处理问题而设计。它针对 xlsx 文件采用 SAX 解析模式和事件驱动模型,像 “流” 一样逐行或逐块读取 Excel 数据,处理完立即释放内存,在处理 100 万行数据时,内存可稳定在 50MB 以内。EEC 的 API 简洁,遵循 “约定优于配置” 原则,核心操作只需几行代码即可完成,同时支持 xls、xlsx、csv 等多种格式,且读写不同格式的 API 完全一致。
    • FastExcel:一个专注于 Excel 读写的轻量级开源库,其 API 设计优雅,支持流式处理,特别适合处理大文件。在实际测试中,处理 100 万行数据时,FastExcel 仅需 2 分钟,峰值内存为 500MB,而 Apache POI 则需要 15 分钟,峰值内存 4GB。相比 POI 性能更优,比 EasyExcel 更轻量。
    • GcExcel:一款服务端 Java Excel 组件,产品架构轻量灵活,无需第三方组件依赖。与 Apache POI 相比,GcExcel 速度更快、性能更高、内存消耗更少,处理速度是 POI 的 7 倍,内存消耗不到 POI 的七分之一。它支持 452 种 Excel 计算公式,内置了更多条件格式规则,支持多种图表类型、迷你图、数据切片器等,还能轻松地导入和导出 CSV,支持导出到 PDF。

-------------------------------------------------------------------------------------------

 

在 Spring Boot 项目中,文件处理(上传、下载、解析、生成等)是常见需求,以下是一些主流的文件处理框架和工具,可根据场景选择使用:

一、基础文件操作(上传 / 下载)

Spring Boot 本身提供了基础的文件上传下载支持,无需额外框架,通过 MultipartFile 即可实现:

1. 文件上传

java
 
运行
 
 
 
 
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {// 获取文件名String fileName = file.getOriginalFilename();// 保存文件到本地file.transferTo(new File("/path/to/save/" + fileName));return "文件上传成功";
}
 

2. 文件下载

java
 
运行
 
 
 
 
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile() {// 加载文件资源Resource resource = new FileSystemResource("/path/to/file.pdf");// 设置响应头return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"").body(resource);
}
 

 

配置优化(application.yml):

 

yaml
 
 
spring:servlet:multipart:max-file-size: 10MB  # 单个文件大小限制max-request-size: 100MB  # 总请求大小限制
 

二、Excel 处理框架(重点推荐)

1. EasyExcel(阿里巴巴)

  • 优势:轻量、内存占用低(流式处理)、API 简洁,支持大数据量 Excel 读写。
  • 场景:导入导出、复杂表头、大数据量(百万级)处理。

 

依赖:

 

xml
 
 
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.0</version>
</dependency>
 

 

示例(导出 Excel):

 

java
 
运行
 
 
 
 
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) throws IOException {// 准备数据List<User> userList = userService.getUserList();// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition", "attachment;filename=users.xlsx");// 写出数据EasyExcel.write(response.getOutputStream(), User.class).sheet("用户列表").doWrite(userList);
}
 

2. Apache POI

  • 优势:功能全面,支持所有 Excel 格式(xls/xlsx),但内存占用较高。
  • 场景:复杂格式处理(图表、公式、宏等)。

 

依赖:

 

xml
 
 
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.4</version>
</dependency>
 

三、PDF 处理框架

1. iText PDF

  • 优势:功能强大,支持 PDF 生成、编辑、签名等。
  • 场景:动态生成 PDF 报表、合同等。

 

依赖:

 

xml
 
 
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>
 

 

示例(生成简单 PDF):

 

java
 
运行
 
 
 
 
public void generatePdf() throws DocumentException, IOException {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));document.open();document.add(new Paragraph("Hello, PDF!"));document.close();
}
 

2. PDFBox

  • 优势:Apache 开源项目,专注于 PDF 解析和提取内容。
  • 场景:读取 PDF 文本、提取图片等。

 

依赖:

 

xml
 
 
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.29</version>
</dependency>
 

四、文件存储框架

1. Spring Cloud Alibaba OSS

  • 优势:集成阿里云对象存储,适合分布式系统的文件存储。
  • 场景:图片、视频等大文件的云端存储。

 

依赖:

 

xml
 
 
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
 

2. MinIO

  • 优势:开源的对象存储服务,兼容 S3 协议,可自建存储服务。
  • 场景:私有化部署的文件存储需求。

 

依赖:

 

xml
 
 
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version>
</dependency>
 

五、其他工具类

  • commons-io:Apache 工具类,简化文件 IO 操作(复制、删除、大小计算等)。
    xml
     
     
    <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
    </dependency>
    
     
  • Thumbnails(thumbnailator):图片处理工具,支持压缩、裁剪、旋转等。
    xml
     
     
    <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.19</version>
    </dependency>

选择建议

  • 简单上传下载:直接使用 Spring Boot 内置的 MultipartFile
  • Excel 处理:优先选 EasyExcel(轻量高效),复杂场景用 POI
  • PDF 处理:生成用 iText,解析用 PDFBox
  • 分布式存储:阿里云 OSS 或 MinIO。

-------------------------------------------------------------------------------------------

 

-------------------------------------------------------------------------------------------

 

-------------------------------------------------------------------------------------------

 

http://www.rkmt.cn/news/3095.html

相关文章:

  • 将 seata 2.5 发布到私服
  • 一些感悟
  • 五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?
  • 从需求出发:教你判断选斑斑还是织信
  • python如何在函数中使用全局变量?
  • C++ - STL - 键值对pair
  • 第四天学习:LSTM
  • MATLAB的稀疏自编码器实现
  • 题解:P2157 [SDOI2009] 学校食堂
  • vue3 与 element-plus
  • 第二周作业
  • 代码随想录算法训练营第一天| 704.二分查找、27.移除元素、977.有序数组的平方
  • 强制横屏 ios
  • 张量链式法则(下篇):揭秘Transpose、Summation等复杂算子反向传播,彻底掌握深度学习求导精髓!
  • 美客分销商城小程序系统介绍
  • C++ - STL - 静态数组array
  • C++ - STL - 集合set(元素具有排他性)
  • 批量删除所有 LXC 容器以及用户名
  • C++ - STL - 动态数组vector(矢量)
  • mt_12
  • 完整教程:【QT】-怎么实现瀑布图
  • 【初赛】二叉树性质和遍历 - Slayer
  • 详细解析苹果iOS应用上架到App Store的完整步骤与指南
  • 如何使用 OCR 提取扫描件 PDF 的文本(Python 实现) - E
  • WeakMap 应用场景与示例
  • 使用 conda 懒加载的方式减少 PowerShell 的启动时间
  • 深入 Spring MVC 底层:从 DispatcherServlet 到自定义组件的全链路解析 - 实践
  • podman 替代docker
  • m1芯片装windows系统使用感受
  • 硬件内在函数