最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用Apache Tika實(shí)現(xiàn)多種文檔的內(nèi)容解析

 更新時(shí)間:2024年12月14日 11:58:37   作者:JaggerVip  
在日常開(kāi)發(fā)中,我們經(jīng)常需要解析不同類型的文檔,如PDF、Word、Excel、HTML、TXT等,Apache Tika是一個(gè)強(qiáng)大的內(nèi)容解析工具,可以輕松地提取文檔中的內(nèi)容和元數(shù)據(jù)信息,本文將通過(guò)SpringBoot和Apache Tika的結(jié)合,介紹如何實(shí)現(xiàn)對(duì)多種文檔格式的內(nèi)容解析

在日常開(kāi)發(fā)中,我們經(jīng)常需要解析不同類型的文檔,如 PDF、Word、Excel、HTML、TXT 等。Apache Tika 是一個(gè)強(qiáng)大的內(nèi)容解析工具,可以輕松地提取文檔中的內(nèi)容和元數(shù)據(jù)信息。本文將通過(guò) SpringBoot 和 Apache Tika 的結(jié)合,介紹如何實(shí)現(xiàn)對(duì)多種文檔格式的內(nèi)容解析。

一、Apache Tika 簡(jiǎn)介

Apache Tika 是一個(gè)用于提取文件內(nèi)容和元數(shù)據(jù)的工具庫(kù),支持解析各種常見(jiàn)的文檔格式,包括但不限于:

  • 文本文件(TXT、CSV)
  • 辦公文檔(Word、Excel、PowerPoint)
  • PDF 文檔
  • 圖像(JPEG、PNG、TIFF)中的文本
  • 音視頻文件的元數(shù)據(jù)
  • HTML 和 XML 文件

特點(diǎn):

  1. 廣泛的格式支持:幾乎支持所有常見(jiàn)的文檔格式。
  2. 簡(jiǎn)單易用:幾行代碼即可實(shí)現(xiàn)內(nèi)容解析。
  3. 跨平臺(tái):基于 Java,可在任何支持 Java 的環(huán)境中運(yùn)行。

二、SpringBoot 集成 Apache Tika

1. 添加 Maven 依賴

在 SpringBoot 項(xiàng)目中引入 Apache 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>

2. 定義文檔解析服務(wù)

創(chuàng)建一個(gè)服務(wù)類,使用 Apache Tika 提取文檔內(nèi)容:

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;

@Service
public class DocumentParserService {

    private final Tika tika;

    public DocumentParserService() {
        this.tika = new Tika(); // 初始化 Tika 實(shí)例
    }

    /**
     * 解析文檔內(nèi)容
     * @param inputStream 文件輸入流
     * @return 提取的內(nèi)容
     * @throws IOException 文件讀取異常
     * @throws TikaException Tika 解析異常
     */
    public String parseContent(InputStream inputStream) throws IOException, TikaException {
        return tika.parseToString(inputStream); // 提取文檔內(nèi)容
    }
}

3. 創(chuàng)建上傳與解析接口

為了實(shí)現(xiàn)文檔解析功能,我們需要提供一個(gè)接口,允許用戶上傳文檔并返回解析內(nèi)容:

import org.apache.tika.exception.TikaException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/documents")
public class DocumentController {

    @Autowired
    private DocumentParserService documentParserService;

    /**
     * 上傳文檔并解析內(nèi)容
     * @param file 上傳的文檔
     * @return 解析的內(nèi)容
     */
    @PostMapping("/upload")
    public String uploadDocument(@RequestParam("file") MultipartFile file) {
        try {
            return documentParserService.parseContent(file.getInputStream());
        } catch (IOException | TikaException e) {
            return "文檔解析失敗: " + e.getMessage();
        }
    }
}

三、測(cè)試文檔解析

啟動(dòng) SpringBoot 項(xiàng)目后,可以使用 Postman 或 cURL 發(fā)送請(qǐng)求:

curl -X POST -F "file=@example.pdf" http://localhost:8080/documents/upload

示例解析結(jié)果

假設(shè)上傳了一個(gè) PDF 文件 example.pdf,解析結(jié)果可能如下:

This is a sample PDF document.
Content extraction with Apache Tika is easy and efficient.

四、支持更多功能

1. 提取元數(shù)據(jù)

Apache Tika 還支持提取文檔的元數(shù)據(jù),例如標(biāo)題、作者、創(chuàng)建日期等:

import org.apache.tika.metadata.Metadata;

public String parseMetadata(InputStream inputStream) throws IOException, TikaException {
    Metadata metadata = new Metadata();
    tika.parse(inputStream, metadata);

    StringBuilder metadataInfo = new StringBuilder();
    for (String name : metadata.names()) {
        metadataInfo.append(name).append(": ").append(metadata.get(name)).append("\n");
    }
    return metadataInfo.toString();
}

2. 文檔類型識(shí)別

識(shí)別文檔的 MIME 類型:

public String detectDocumentType(InputStream inputStream) throws IOException {
    return tika.detect(inputStream);
}

3. 添加日志記錄

在解析文檔時(shí),記錄解析的文件名、時(shí)間等信息:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class DocumentParserService {

    private static final Logger logger = LoggerFactory.getLogger(DocumentParserService.class);
    private final Tika tika;

    public DocumentParserService() {
        this.tika = new Tika();
    }

    public String parseContent(InputStream inputStream, String fileName) throws IOException, TikaException {
        long startTime = System.currentTimeMillis();
        String content = tika.parseToString(inputStream);
        logger.info("Parsed file [{}] in {} ms", fileName, System.currentTimeMillis() - startTime);
        return content;
    }
}

五、完整示例:解析多種文檔

將上述功能整合到一個(gè)完整的系統(tǒng)中,可以支持上傳、解析內(nèi)容、提取元數(shù)據(jù)等功能。

目錄結(jié)構(gòu)

src
├── main
│   ├── java
│   │   ├── com.example.tika
│   │   │   ├── DocumentParserService.java
│   │   │   ├── DocumentController.java
│   ├── resources
│   │   └── application.yml

示例項(xiàng)目啟動(dòng)后測(cè)試

  1. 上傳一個(gè) Word 文件,返回內(nèi)容。
  2. 上傳一個(gè) PDF 文件,返回內(nèi)容及元數(shù)據(jù)。

六、性能優(yōu)化建議

  1. 限制文件大?。悍乐股蟼鬟^(guò)大的文件導(dǎo)致性能問(wèn)題。
  2. 異步處理:對(duì)于大型文檔,可以通過(guò)異步任務(wù)解析,提高系統(tǒng)響應(yīng)速度。
  3. 緩存解析結(jié)果:對(duì)于重復(fù)上傳的文檔,可以緩存解析結(jié)果。

七、總結(jié)

通過(guò) SpringBoot 和 Apache Tika 的結(jié)合,我們可以快速實(shí)現(xiàn)多種文檔格式的解析功能。Apache Tika 提供了強(qiáng)大的文檔內(nèi)容提取和元數(shù)據(jù)處理能力,適用于內(nèi)容搜索、文件分析等場(chǎng)景。

到此這篇關(guān)于SpringBoot使用Apache Tika實(shí)現(xiàn)多種文檔的內(nèi)容解析的文章就介紹到這了,更多相關(guān)SpringBoot和Apache Tika實(shí)現(xiàn)文檔解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出

    淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出

    這篇文章主要介紹了淺談springboot項(xiàng)目中定時(shí)任務(wù)如何優(yōu)雅退出?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java中g(shù)etResourceAsStream用法分析

    Java中g(shù)etResourceAsStream用法分析

    這篇文章主要介紹了Java中g(shù)etResourceAsStream用法,較為詳細(xì)的分析了getResourceAsStream的功能及用法,需要的朋友可以參考下
    2015-06-06
  • Java Socket實(shí)現(xiàn)文件傳輸示例代碼

    Java Socket實(shí)現(xiàn)文件傳輸示例代碼

    這篇文章主要介紹了Java Socket實(shí)現(xiàn)文件傳輸示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • java.lang.ClassCastException的問(wèn)題解決

    java.lang.ClassCastException的問(wèn)題解決

    本文主要介紹了java.lang.ClassCastException的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java使用mapstruct實(shí)現(xiàn)對(duì)象拷貝

    Java使用mapstruct實(shí)現(xiàn)對(duì)象拷貝

    MapStruct可以簡(jiǎn)化對(duì)象之間的映射,本文就來(lái)介紹一下Java使用mapstruct實(shí)現(xiàn)對(duì)象拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • JSON 格式的弊端與解決方法(真實(shí)示例)

    JSON 格式的弊端與解決方法(真實(shí)示例)

    JSON 格式是目前最流行的數(shù)據(jù)交互格式,廣泛應(yīng)用于前后端分離的系統(tǒng)。但也有一些場(chǎng)合不適合使用 JSON 格式,這篇文章主要介紹了JSON 格式的弊端與解決方法,需要的朋友可以參考下
    2022-09-09
  • Spring Security無(wú)法調(diào)用接口錯(cuò)誤的問(wèn)題解決

    Spring Security無(wú)法調(diào)用接口錯(cuò)誤的問(wèn)題解決

    記錄一下之前在寫(xiě)程序的時(shí)候遇到的問(wèn)題,Spring Security無(wú)法調(diào)用接口錯(cuò)誤的問(wèn)題,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下
    2023-08-08
  • spring boot系列之集成測(cè)試(推薦)

    spring boot系列之集成測(cè)試(推薦)

    這篇文章主要介紹了spring boot系列集成測(cè)試,需要的朋友可以參考下
    2018-03-03
  • java暴力匹配及KMP算法解決字符串匹配問(wèn)題示例詳解

    java暴力匹配及KMP算法解決字符串匹配問(wèn)題示例詳解

    這篇文章主要為大家介紹了java算法中暴力匹配算法及KMP算法解決字符串匹配的問(wèn)題示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Spring?Boot?+?Spring?Batch?實(shí)現(xiàn)批處理任務(wù)的詳細(xì)教程

    Spring?Boot?+?Spring?Batch?實(shí)現(xiàn)批處理任務(wù)的詳細(xì)教程

    這篇文章主要介紹了Spring?Boot+Spring?Batch實(shí)現(xiàn)批處理任務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

晋城| 文登市| 阳东县| 逊克县| 鄂州市| 甘南县| 信宜市| 家居| 依兰县| 平和县| 老河口市| 繁昌县| 雷波县| 岗巴县| 绥中县| 连江县| 新巴尔虎左旗| 甘泉县| 荣成市| 临江市| 色达县| 新干县| 河北省| 海口市| 文安县| 中山市| 招远市| 通辽市| 屏东市| 徐闻县| 福安市| 江源县| 汉源县| 凌源市| 枣庄市| 云林县| 保定市| 泗洪县| 启东市| 哈尔滨市| 孟津县|