[英]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.