使用Tika罐子进行Mimetype检查

时间:2014-03-06 13:20:54

标签: java apache-poi apache-tika

我正在开发标准的单独Java批处理。我正在尝试使用Tika Jars确定文件附件mimetype。我正在使用Tika 1.4 Jar文件。

我的代码看起来像

Parser parser= new AutoDetectParser();
InputStream stream = new FileInputStream(fileAttachment);
int writerHandler =-1;
ContentHandler contentHandler= new BodyContentHandler(writerHandler);
Metadata metadata= new Metadata();
parser.parse(stream, contentHandler, metadata, new ParseContext());
String mimeType = metadata.get(Metadata.CONTENT_TYPE);
logger.debug("File Attachment: "+fileattachment.getName()+" MimeType is: "+mimeType);

此代码对于office 03和07文档无效。

从eclipse运行时我得到了正确的mimetypes。

我构建jar文件并从命令运行它给出了错误的mimetypes。

out put from command
------------
File Attachment: Testpdf.pdf  MimeType is: application/pdf
File Attachment: Testpdf.tif  MimeType is: image/tiff
File Attachment: Testpdf.xlsx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.xltx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.pptx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.docx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.xls  MimeType is: application/zip
File Attachment: Testpdf.doc  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.dot  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.ppt  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.xlt  MimeType is: application/vnd.ms-excel

我尝试使用OfficePraser,OOXMLParser。它不起作用。 我尝试过tika 0.9 jar文件。 mimeTypes正确,但如果我的文件附件中的任何一个是“editable pdf”,我的批处理过程就会死亡(如代码中的“exit(0);”)。 如果我有新的tika罐子,它会给出错误的mimeTypes。

请帮帮我。提前谢谢。

CVSR Sarma

1 个答案:

答案 0 :(得分:3)

首先,你使用了错误的Apache Tika。如果你想知道的只是文件类型,那么你应该直接使用Detection APIjavadocs),例如:

TikaConfig tika = new TikaConfig();

Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, filename);
String mimetype = tika.getDetector().detect(stream, metadata);

如果你的类路径中只有tika-core jar,那么上面的检测将使用Mime Magic和Filename提示。这将让它获得大多数文件,特别是如果它们具有正确的扩展名,但它只会错误地命名为“容器格式”

容器格式就像zip,ole2等,其中一种文件格式可以容纳多种类型(例如ods,xlsx,主题演示全部使用.zip,.doc和.xls都使用ole2)。如果您想进行检查以查看容器内部以获得更准确的结果,则还需要包含tika-parser jar及其依赖项。

请注意,作为explained in the Javadocs,您的流需要支持标记和重置才能使检测工作。这样Tika可以读取您的流的第一位,查看它以确定您的文件是什么,然后将流返回到它为其他用途准备的方式(例如解析)。大多数流都应该,但如果你没有,最简单的解决方法是将它包装在TikaInputStream通过TikaInputStream.get,然后为你排序所有这些