簡體   English   中英

如何將新的 mime 類型添加到 apache tika

[英]How to add new mime type to apache tika

這是我閱讀 mime 類型的課程。 我正在嘗試添加新的 MIME 類型(屬性文件)並閱讀它。

這是我的類文件:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package check_mime;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.tika.Tika;
import org.apache.tika.mime.MimeTypes;


public class TikaFileTypeDetector {

    private final Tika tika = new Tika();

    public TikaFileTypeDetector() {
        super();
    }

    public String probeContentType(Path path) throws IOException {

        // Check contents first
        String fileContentDetect = tika.detect(path.toFile());
        if (!fileContentDetect.equals(MimeTypes.OCTET_STREAM)) {
            return fileContentDetect;
        }

        // Try file name only if content search was not successful
        String fileNameDetect = tika.detect(path.toString());
        if (!fileNameDetect.equals(MimeTypes.OCTET_STREAM)) {
            return fileNameDetect;
        }

        return null;
    }

    public static void main(String[] args) throws IOException {

        Tika tika = new Tika();

        if (args.length != 1) {
            printUsage();
            return;
        }
        Path path = Paths.get(args[0]);

        TikaFileTypeDetector detector = new TikaFileTypeDetector();

        String contentType = detector.probeContentType(path);

        System.out.println("File is of type - " + contentType);
    }

    public static void printUsage() {
        System.out.print("Usage: java -classpath ... "
                + TikaFileTypeDetector.class.getName()
                + " ");
    }
}

文檔中我創建了一個自定義 xml:

 <?xml version="1.0" encoding="UTF-8"?>
 <mime-info>
   <mime-type type="text/properties">
          <glob pattern="*.properties"/>
   </mime-type>
 </mime-info>

現在我如何添加到我的程序並閱讀它。 我必須創建解析器嗎? 我被困在這里。

Apache Tika 5 分鍾解析器說明中介紹了這一點。 要添加對 Java .properties 文件的支持,您應該首先創建一個名為custom-mimetypes.xml的文件並使用以下內容填充它:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info>
  <mime-type type="text/properties">
     <_comment>Java Properties</_comment>
     <glob pattern="*.properties"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
</mime-info>

接下來,您需要使用正確的名稱將其放在 Tika 可以找到的地方。 必須作為org/apache/tika/mime/custom-mimetypes.xml在您的類路徑中。 最簡單的方法是創建該目錄結構,將新文件移入,然后將根目錄添加到類路徑中。 對於部署,您應該將其打包成一個 jar 並將其放在類路徑中

如果您小心的話,您可以使用 Tika 應用程序來檢查您的 MIME 類型文件是否已加載。 將您的代碼打包為 jar 后,以如下方式運行它:

java -classpath tika-app-1.10-SNAPSHOT.jar:my-custom-mimetypes.jar org.apache.tika.cli.TikaCLI --list-supported-types | grep text/properties

或者,如果您在本地目錄中有它,請嘗試類似

ls -l org/apache/tika/mime/custom-mimetypes.xml
# Check a file was found, with some content in it
java -classpath tika-app-1.10-SNAPSHOT.jar:. org.apache.tika.cli.TikaCLI --list-supported-types | grep text/properties

如果那沒有顯示您的 MIME 類型,那么您沒有獲得正確的路徑或文件名,請仔細檢查它們

(或者,升級到更新版本的 Apache Tika,因為從 r1686315 開始,Tika 內置了 Java 屬性 mimetype!)

在您的resources文件夾中添加包org\\apache\\tika\\mime並創建文件custom-mimetypes.xml

把下面的代碼

<?xml version="1.0" encoding="UTF-8"?>
<mime-info>
  <mime-type type="custom-mime-type">
    <glob pattern="*.custom-extension"/>
  </mime-type>
</mime-info>

custom-mime-type替換為您的 MIME 類型,將custom-extension替換為您的擴展。 請檢查下面的目錄結構。

順便說一句,您還可以通過下載該文件並將其放在custom-mimetypes.xml旁邊來在本地加載tike mime-types 僅當您需要更改標准 tike mime-types 時,這才有用。 要記住的一件事是,您不能在兩個 xml 中使用相同的 MIME 類型/擴展名。

在此處輸入圖片說明

Tika 將通過 Java 資源加載檢測您的自定義定義,並自動將其添加到自己的定義中:為此,您需要將其命名為 custom-mimetypes.xml 並將其放入代碼庫中的 org.apache.tika.mime 包中。

如果您從您的類創建一個 jar 文件,您還需要在 jar 中包含您的 custom-mimetypes.xml。

MediaType mediaType = detector.detect(stream, metadata);
        System.out.println("Detected Media Type: " + mediaType.toString());
        MimeType mimeType = config.getMimeRepository().forName(mediaType.toString());
        String extension = mimeType.getExtension();

暫無
暫無

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

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