spring boot + Apache tika 实现文档内容解析

文摘   2024-12-01 14:39   陕西  

最近在项目里玩了一波文件内容解析,顺手把 Apache Tika 和 Spring Boot 集成了一下,发现还挺香的!

今天就来聊聊怎么用 Spring Boot 搭配 Apache Tika 轻松搞定各种文档内容解析。是的,不管是 PDF、Word 还是 Excel,统统拿下!顺便加点代码实例,让大家看得明白。😉

为什么用 Apache Tika?

首先,Apache Tika 是个超强的文档解析库,支持上百种文档格式,比如 Office 系列、PDF、HTML、TXT 等。它不仅能把文档里的内容提取出来,还能顺便帮你识别文件类型。这对我们这些经常需要处理文件上传、全文检索的场景来说,简直不能更实用!

但是,Tika 单独用起来还是有点复杂,尤其是要手动配置的地方不少。这就让我们想起了 Spring Boot 的 “祖传简化开发体验”:不集成到 Spring 里总感觉少了点什么,对吧?

如何用 Spring Boot 集成 Apache Tika?

来,划重点,五步走流程学起来,保你一分钟上手!

1. 依赖引入

首先,给 pom.xml 加上 Tika 的依赖。核心包负责核心功能,解析器包用来支持各种文档格式:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>2.7.0</version>
</dependency>

这一波依赖加下来,基本文件类型都搞定了。如果需要支持更冷门的格式,比如 .msg 邮件,记得看看官方文档补充依赖。

2. 配置文件

创建一个 tika-config.xml,放在 src/main/resources 目录下。这个文件主要是用来定制解析行为的,比如字符编码、检测器配置等等:

<?xml version="1.0" encoding="UTF-8"?>
<properties>
    <detectors>
        <detector class="org.apache.tika.detect.DefaultDetector" />
    </detectors>
    <parsers>
        <parser class="org.apache.tika.parser.DefaultParser" />
    </parsers>
</properties>

虽然默认配置已经够用了,但如果你的业务有特殊需求,比如要优先检测某种文件格式,可以在这里调整。

3. Spring Boot 配置类

Spring 的特色就是 Bean 管理嘛,所以我们把 Tika 包装成一个 Spring Bean,方便全局注入使用:

import org.apache.tika.Tika;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TikaConfig {

    @Bean
    public Tika tika() {
        return new Tika();
    }
}

这段代码看起来简单,但核心是让 Tika 成为 Spring 容器里的一个“家庭成员”。从此可以用 @Autowired 随叫随到!

4. 开始解析文档!

到了最爽的环节了,直接用代码解析文档内容。这段代码给你演示如何解析一个 PDF 文件:

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;

@Service
public class DocumentParserService {

    @Autowired
    private Tika tika;

    public String parseFile(String filePath) throws IOException, TikaException {
        File file = new File(filePath);
        // 使用 Tika 解析文件内容
        return tika.parseToString(file);
    }
}

比如有个文件 E:/Docker生产环境安装指南.pdf,你可以这样解析:

String content = documentParserService.parseFile("E:/Docker生产环境安装指南.pdf");
System.out.println(content);

运行后,你会看到 PDF 文件里的内容一字不落地打印出来!✨

5. 检测文件类型

除了提取内容,Tika 还能检测文件类型,帮你快速判断上传的文件是否合法,比如:

public String detectFileType(String filePath) throws IOException {
    File file = new File(filePath);
    return tika.detect(file);
}

举个例子,一个 .txt 文件会返回 text/plain,一个 .pdf 文件会返回 application/pdf。这功能用在文件上传校验里简直绝了!


实战中的坑和注意点

虽然用起来简单,但 Tika 有几个坑踩过才能懂:

  1. 大文件解析要注意性能
    默认情况下,Tika 会把整个文件的内容加载到内存中解析,文件太大时容易内存爆炸!解决方法是用流式解析,像这样:

    public String parseFileWithStream(String filePath) throws IOException, TikaException {
        try (InputStream stream = new FileInputStream(filePath)) {
            return tika.parseToString(stream);
        }
    }
  2. 字符编码问题
    如果你的文档内容有乱码问题,建议检查 tika-config.xml 的编码检测器配置是否正确。

  3. 解析结果二次处理
    如果你的文档内容是富文本,比如包含 HTML 标签,Tika 会直接输出原始 HTML。这时候可以用 Jsoup 或类似工具对内容做清理。

总结

Spring Boot + Apache Tika 的组合是真的强,代码量少,功能全,不仅能省开发时间,还能轻松适配各种文档解析场景。最重要的是,写代码的快乐得到了极大的保留!💻

要是你们公司也有类似需求,赶紧试试这套组合吧,老板看了都说好!😂

-END-


ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学找我领取。

以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言

程序员老鬼
10年+老程序员,专注于AI知识普及,已打造多门AI课程,本号主要分享国内AI工具、AI绘画提示词、Chat教程、AI换脸、Chat中文指令、Sora教程等,帮助读者解决AI工具使用疑难问题。
 最新文章