Apache Tika - 检测JSON / PDF特定的mime类型

时间:2018-02-05 08:45:44

标签: java mime-types apache-tika

我使用Apache Tika base64 代表中检测文件Mime Type。 很遗憾,我没有关于该文件的其他信息(例如扩展名)。

我能做些什么让Tika更具体?

我目前正在使用这个:

Tika tika = new Tika();
tika.setMaxStringLength(-1);
String mimetype = tika.detect(Base64.decode(fileString));

它为JSON和PDF文件提供了text/plain,但我希望获得更具体的信息:application/jsonapplication/pdf等......

希望有人可以帮助我!

感谢。

2 个答案:

答案 0 :(得分:4)

在我过去的项目中,我使用了TikaConfig

我做的是:

//Note you can use alse byte[] instead of InputStream
InputStream is = new FileInputStream(new File(YOUR_FILE));
TikaConfig tc = new TikaConfig();
Metadata md = new Metadata();
md.set(Metadata.RESOURCE_NAME_KEY, fileName);
String mimeType = tc.getDetector().detect(TikaInputStream.get(is), md).toString();

使用byte[]

byte[] fileBytes = GET_BYTE_ARRAY_FROM_YOUR_FILE;
TikaConfig tc = new TikaConfig();
Metadata md = new Metadata();
md.set(Metadata.RESOURCE_NAME_KEY, fileName);
String mimeType = tc.getDetector().detect(TikaInputStream.get(fileBytes), md).toString();

我没有遇到正确的mimeType ....

我希望它有用

安吉洛

答案 1 :(得分:4)

<强> from urllib import urlencode

  

检测具有给定文件名的文档的媒体类型。

传递PDF或JSON文件的内容将无法用作this method expects a filename。 Tika将回退到Tika#detect(String),因为它找不到任何匹配的文件名。

<强> PDF

对于PDF,您只需要将一些数据写入流中,或者将其传递给某些字节,并通过寻找特殊(“魔术”)字节模式让Tika使用Mime Magic Detection读取靠近文件的开头(纯文本为text/plain):

%PDF

<强> JSON

对于JSON,即使这种方法也会返回String pdfContent = "%PDF-1.4\n%\\E2\\E3\\CF\\D3"; // i.e. base64 decoded Tika tika = new Tika(); System.out.println(tika.detect(pdfContent.getBytes())); // "application/pdf" &amp;蒂卡是对的。 text/plain就像纯文本的子类型,表示文本应该被不同地解释。这就是你得到application/json时必须要做的事情。使用JSON库(例如Jackson)来解析内容以查看它是否是有效的JSON:

text/plain

因为杰克逊将单个数字Sring json = "[1, 2, 3]"; // an array in JSON try { final JsonParser parser = new ObjectMapper().getFactory().createParser(json); while (parser.nextToken() != null) { } System.out.println("Probably JSON!"); } catch (Exception e) { System.out.println("Definitely not JSON!"); } 视为有效的JSON,所以要小心你想要多严格,但事实并非如此。为了解决这个问题,您可以首先测试字符串以1{开头(可能前面有空格),使用[之类的内容,甚至尝试将其解析为JSON

这是DZone tutorial for Jackson