Spring Boot + Apache Tika 实现文档内容解析
一、Tika简介
Apache Tika
核心功能
- 文档类型识别:通过文件头字节、文件名扩展及容器格式深度解析多重检测机制确定文件类型。
- 元数据提取:获取文件作者、创建时间、修改日期、标题等元数据信息。
- 文本提取:去除HTML标记并提取纯文本内容,支持流式处理大文件以避免内存溢出。
- 语言检测:识别文本使用的语言(如中文、英文、法文)。
- 媒体元数据提取:支持音频/视频文件的分辨率、时长、编码格式等信息的提取。
二、添加 Apache Tika 依赖
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.26</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers</artifactId> <version>1.26</version> </dependency>
三、创建文档解析服务
import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.sax.BodyContentHandler; import org.springframework.stereotype.Service; import org.apache.tika.metadata.Metadata; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; /** * @ClassName:DocumentParserService * @Description: 创建文档解析服务 * @Author: songwp * @Date: 2025/8/5 16:27 */ @Service public class DocumentParserService { /** * 解析文档内容 * @param file * @return */ public String parseDocument(File file) { StringBuilder content = new StringBuilder(); try (InputStream stream = new FileInputStream(file)) { BodyContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); AutoDetectParser parser = new AutoDetectParser(); parser.parse(stream, handler, metadata); content.append(handler.toString()); } catch (Exception e) { e.printStackTrace(); content.append("Error: ").append(e.getMessage()); } return content.toString(); } }
四、创建控制器类
import com.ruoyi.web.controller.tika.DocumentParserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; /** * @ClassName:DocumentParserController * @Description: 解析文档的控制器 * @Author: songwp * @Date: 2025/8/5 16:29 */ @RestController @RequestMapping("/api/documents") public class DocumentParserController { @Autowired private DocumentParserService documentParserService; @PostMapping("/parse") public ResponseEntity<String> parseDocument(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.badRequest().body("File is empty"); } try { // 将上传的文件转换为临时文件 File tempFile = File.createTempFile("document-", ".tmp"); file.transferTo(tempFile); tempFile.deleteOnExit(); // 调用文档解析服务解析文档内容 String parsedContent = documentParserService.parseDocument(tempFile); return ResponseEntity.ok(parsedContent); } catch (IOException e) { e.printStackTrace(); return ResponseEntity.status(500).body("Error: " + e.getMessage()); } } }
五、配置和运行
配置 Apache Tika 数据文件 确保你的项目根目录有一个 tessdata 文件夹,其中包含 Apache Tika 的数据文件。 (1) Apache Tika 官方网站 下载合适的语言数据文件。 (2) 云盘数据下载:https://pan.baidu.com/s/13oPR2r7qOE6lt6SgbpWOQA 提取码: uaaw
六、测试与验证
(1)以下是准备的文档内容截图

(2) tika文档内容解析如下:

七、注意事项
1、 文件格式支持 确保上传的文件是 Apache Tika 支持的格式,如 PDF、Word 文档、Excel 表格等。 2、优化解析性能 针对大文件和复杂格式的文档,可能需要优化解析性能。可以考虑使用异步处理、文件流处理等技术来提升解析速度和稳定性。
古今成大事者,不唯有超世之才,必有坚韧不拔之志!

浙公网安备 33010602011771号