当前位置: 首页 > 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.wxhsa.cn/company.asp?id=2036

相关文章:

  • Docker:龙晰系统(Anolis)更新yum源下载docker
  • 针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现
  • vue3中父子组件数据同步的默认方式update:xxx
  • 解决 C# 当另一个read操作挂起时不能调用read方法的问题
  • AI辅助编程_工具和方式
  • [完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践
  • k8s源码分析——kubectl命令行交互
  • 将 seata 2.5 发布到私服
  • 一些感悟
  • 五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?
  • ubuntu历史版本下载
  • 读书笔记:数据库索引的智能优化:反向键与降序索引
  • 代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
  • 零成本搭建企业系统:五款免费低代码平台推荐
  • 故障处理:access$表在数据库丢失的恢复
  • 从需求出发:教你判断选斑斑还是织信
  • PLC结构化文本设计模式——建造者模式(Builder Pattern)
  • C++ - STL - 迭代器
  • MATLAB的智能扫地机器人工作过程仿真
  • linux redis 8.2.1软件开机启动redis.service与etc下的rc.local配置2种方式
  • 在GA中添加Tag-GetDynamicSpecSourceTags().AddTag(NewTag)
  • python如何在函数中使用全局变量?
  • 296、贾生
  • ubuntu 24.04部署mysql8.0.41(glibc2.17)
  • C++ - STL - 键值对pair
  • 第四天学习:LSTM
  • MATLAB的稀疏自编码器实现
  • 题解:P2157 [SDOI2009] 学校食堂
  • LLM 应用开发中的常见模式
  • vue3 与 element-plus