Bri*_*n12 4 java mime-types apache-tika
我正在使用Apache Tika从其base64表示中检测文件 Mime 类型。不幸的是,我没有关于该文件的其他信息(例如扩展名)。
有什么我可以做的让蒂卡更具体吗?
我目前正在使用这个:
Tika tika = new Tika();
tika.setMaxStringLength(-1);
String mimetype = tika.detect(Base64.decode(fileString));
Run Code Online (Sandbox Code Playgroud)
,这让我text/plain对JSON和PDF文件,但我想获得更具体的信息:application/json,application/pdf等等...
希望可以有人帮帮我!
谢谢。
Tika#detect(String)
检测具有给定文件名的文档的媒体类型。
传递 PDF 或 JSON 文件的内容将不起作用,因为此方法需要 filename。Tika 将回退到,text/plain因为它找不到任何匹配的文件名。
对于 PDF,您只需要将一些数据写入流,或者将一些字节传递给它,然后让 Tika 使用Mime Magic Detection通过查找靠近开头的特殊(“魔术”)字节模式来读取该数据文件(纯文本格式为%PDF):
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"
Run Code Online (Sandbox Code Playgroud)
JSON
但是对于 JSON,即使这种方法也会返回text/plain,而 Tika 是正确的。application/json就像纯文本的一个子类型,表示应该以不同的方式解释文本。因此,如果您获得text/plain. 使用 JSON 库(例如Jackson)解析内容以查看它是否是有效的 JSON:
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!");
}
Run Code Online (Sandbox Code Playgroud)
请注意您想要的严格程度,因为 Jackson 将单个数字1视为有效的 JSON,但事实并非如此。为了解决这个问题,您可以首先使用类似的东西来测试字符串是否以{or开头[(可能前面有空格)json.matches("^\\s*[{\\[].*"),甚至在尝试将其解析为 JSON 之前。
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |