---
# System prepended metadata

title: Apache Tika Server 介紹與安裝

---

# Apache Tika Server 介紹與安裝

## Apache Tika Server 簡介

Apache Tika Server 是一個基於 Apache Tika 的獨立服務，它提供了一種方便的方式來檢索和提取各種文件的內容和元數據。無論是文本文檔、電子表格、演示文稿、圖像、音頻還是視頻，Tika Server 都可以處理各種類型的文件。它是 Apache Tika 的一個功能強大的子項目，可以幫助開發人員在他們的應用程序中進行文本分析和信息擷取。

Tika Server 採用了客戶端-服務器架構，可以通過 HTTP 協議接收請求並返回處理結果。這使得 Tika Server 可以與不同的客戶端應用程序進行交互，包括 Web 應用程序、命令行工具或其他服務。它的設計目標是提供一個簡單易用的介面，使開發人員能夠輕鬆地將 Tika 的功能集成到他們的應用程序中。

Tika Server 提供了各種功能和服務，包括文本提取、元數據擷取和語言檢測。它可以將輸入文件轉換為純文本，並提取出其中的文字內容、元數據（如作者、標題、創建日期等）以及結構化的信息（如表格、列表等）。此外，Tika Server 還支持自然語言處理功能，例如斷詞、詞性標註和命名實體識別，這些功能可以幫助開發人員進行更高級的文本分析。

## Windwos 環境安裝

* 安裝 Java Runtime , 這邊我選擇 [Microsoft 提供的 OpenJDK 17](https://learn.microsoft.com/zh-tw/java/openjdk/download)，Oracle 提供的那個之前有些授權問題。

* 下載 Apache Tika Server，就一個 [tika-server-standard-2.7.0.jar](https://www.apache.org/dyn/closer.lua/tika/2.7.0/tika-server-standard-2.7.0.jar) 而已。

* 下載 [Apache Commons Daemon binary distributions for Windows](https://downloads.apache.org/commons/daemon/binaries/windows/)，**commons-daemon-1.3.3-bin-windows.zip** 。

* 建立資料夾 `D:\TikaServer` jar 跟 zip 解壓丟進去，**prunsrv.exe** 改用 amd64 目錄下面那一個，因為佈署在 x64 的環境下。

* 完成上述動作後資料夾下只要留下，**prunsrv.exe**、**tika-server-standard-2.7.0.jar**、**prunmgr.exe** 三個檔案就可以了。

* 新增 'InstallTikaServer.bat' 檔內容約略如下，建立好後執行 BAT 就可以 Tika Server 註冊進 Windwos 服務。
  bat檔中有一段 `++StartParams=-host#*` 設定服務 Listen 所有的主機可用的IP，不然預設只會在 127.0.0.1:9998 上運作。
  
  ```batch
  REM 放置檔案的目錄
  SET BasePath=D:\TikaServer

  REM 根據安裝 Java 版本不同路徑可能會有所差異
  SET JvmDllPath="C:\Program Files\Microsoft\jdk-17.0.7.7-hotspot\bin\server\jvm.dll"

  prunsrv.exe //IS//TikaServer ^
  --DisplayName="Tika Server" ^
  --Description="Tika Server" ^
  --Install="%BasePath%\prunsrv.exe" ^
  --Startup=auto ^
  --LogPath="%BasePath%\Logs" ^
  --Jvm=%JvmDllPath% ^
  --Classpath="%BasePath%\tika-server-standard-2.7.0.jar" ^
  --StartMode=jvm ^
  --StartClass=org.apache.tika.server.core.TikaServerCli ^
  --StartMethod=main ^
  --StopMode=jvm ^
  --StopClass=org.apache.tika.server.core.TikaServerCli ^
  --StopMethod=stop ^
  ++StartParams=-host#*
  ```

* 新增 'RemoveTikaServer.bat' 檔內容約略如下，這檔案是要把 Tika Server 從服務移除時才需要執行。  
  
  ```batch
  prunsrv.exe //DS//TikaServer
  ```

* 將 **prunmgr.exe** 更名為 **TikaServer.exe**，這個名字是根據上面註冊服務時使用的名字決定。  

* 後續透過 **TikaServer.exe** 就可以調整服務參數，或重啟服務。

## 使用範例

* 透過 C# 呼叫 TikaServer 取得檔案中的文字資訊。
  
  ```csharp
  var filePath = @"D:\TestData\xxxx.docx";
  var fileStream = File.OpenRead(filePath);
  var content = new StreamContent(fileStream);
  
  var client = new HttpClient();
  var request = new HttpRequestMessage(HttpMethod.Put, "http://127.0.0.1:9998/tika");
  request.Content = content;
  request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
  
  var response = await client.SendAsync(request);
  var responseContent = await response.Content.ReadAsStringAsync();
  
  Console.WriteLine(responseContent);
  ```

* 透過 curl 呼叫 TikaServer 取得檔案中的文字資訊。
  
  ```bash
  # 回傳 html 格式的本文
  curl -s -T 資通安全法說明.pdf http://127.0.0.1:9998/tika 
  
  # 回傳純文字格式的本文
  curl -s -T 資通安全法說明.pdf http://127.0.0.1:9998/tika -H "Accept: text/plain"
  
  # 回傳 json 格式的資料，這種格式資料會在豐富一點，除了一個欄位是 html 本文外 ，還有一些其他的檔案資訊會一併取得
  curl -s -T 資通安全法說明.pdf http://127.0.0.1:9998/tika -H "Accept: application/json"
  
  # 單純判讀檔案類型
  curl -s -T 資通安全法說明.pdf http://127.0.0.1:9998/detect/stream 
  ```

## 補充說明

* Tika 可以讀取的文件總類非常多 doc、docx、ppt、pptx、pdf、xls、xlsx、ods、odt 基本常見的應該都有支援。
* Tika Server 預設只 Listen 127.0.0.1:9998，如果要改成 0.0.0.0:9998 要注意安全性問題，這個 API 沒有可以設定授權驗證的功能。
* Tika 除了讀取本文外，也可以拿來做檔案類型的判讀。(不是單純看副檔名那種)
* Linux 環境安裝的話直接用 docker compose 佈署簡單乾淨不黏牙。

## 網路參考資料

* [Apache Tika 官方網站](https://tika.apache.org/)

* [Apache Commons Daemon](https://commons.apache.org/proper/commons-daemon/binaries.html)

* [Apache Commons Daemon binary distributions for Windows](https://downloads.apache.org/commons/daemon/binaries/windows/)

* [Apache Tika實戰](https://iter01.com/524316.html)
