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。

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

 

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

 

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

 

posted @ 2025-09-12 15:51  hanease  阅读(17)  评论(0)    收藏  举报