簡體   English   中英

Apache Tika 無法使用文件內容檢測 Content-Type

[英]Apache Tika unable to detect Content-Type using file content

我一直在嘗試僅使用文件內容來檢測 mime 類型,使用 Apache Tika Core 和 Apache Tika Parser 1.23 jars。下面是相同的代碼:

Tika tika = new Tika();
File file = new File(filepath);
String mimeType = tika.detect(file);

Tika 無法檢測擴展名為.tmp(文本/普通文件)和 iso-8859-1 字符集的文件的內容類型,內容如下:

èå

雖然可以正確檢測到具有相同配置和以下內容的文件:

000000000000000000000000000000000000000000000000000000000000000000000000000000000000來不足000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000來0000000000來解釋室

我已經嘗試使用 Linux File 命令來檢測 mime 類型,並且它按預期工作。 我還嘗試使用 Apache Tika App 2.1.0 GUI,但它的行為與我的代碼相同。

有關如何使用文件內容檢測此類文件的任何建議嗎? 先感謝您。

在 ISO 8859-1 編碼中,這些字符將在 8 位字符范圍內,即擴展范圍 128 到 256。但是,雖然 TextDetector 對它們進行計數,但在計算文件是否主要是文本時不會考慮它。

我是 Tika 開發團隊的一員,所以我會看看原始門票的歷史,看看如何最好地考慮到這一點。

您可以通過覆蓋Tika 配置文件org.apache.tika.detect.Detector服務加載器來自定義您在 Tika 中使用的檢測器。

現在,您可能需要考慮使用其中一種方法將FileCommandDetector添加到您的配置中,以允許您繼續使用這種方法。

例如,使用以下配置文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
  <detectors>
    <detector class="org.apache.tika.detect.FileCommandDetector"/>
    <detector class="org.apache.tika.detect.OverrideDetector"/>
    <detector class="org.apache.tika.mime.MimeTypes"/>
  </detectors>
</properties>

運行以下文本檢測將正確地將其標記為文本/純文本:

java -jar tika-app-2.1.0.jar --config=tika-config.xml -d test.tmp

默認配置會將其標記為application/octet-stream

java -jar tika-app-2.1.0.jar -d test.tmp

FileCommandDetector執行文件命令(如果在本地計算機上可用)以檢測類型。

Tika 在文件中看到這些二進制值: 1110100011100101

這些二進制值可能意味着任何東西。 它可以是一個 integer 或者長期存儲在這個文件中,即 59621

這種少量的內容給 Tika 提供的值太少而無法進行有根據的猜測,因此它默認不識別它,因為它不確定它的類型,並且擴展名無助於清除超出閾值的內容肯定。

這就是為什么您的較長文件確實有效的原因,因為它是一個長數據分段的整數片段,作為文本文件進行掩碼的變化較小。

當 tika 由於文件不足而失敗時,嘗試通過shell_exec()進行系統調用作為備份,以最好地猜測文件類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM