我试图使用Tika解析Outlook消息的html主体。当我在我的Windows机器上运行以下方法时它工作正常,我得到电子邮件正文的纯文本表示。
private String parseHtml(InputStream stream) throws Exception {
ContentHandler contenthandler = null;
try {
Metadata metadata = new Metadata();
Parser parser = new AutoDetectParser();
contenthandler = new BodyContentHandler();
parser.parse(stream, contenthandler, metadata, new ParseContext());
System.out.println(contenthandler.toString());
}
catch (Exception e) {
e.printStackTrace();
}
return contenthandler != null ? contenthandler.toString() : null;
}
然而,当我在CentOS VM和物理服务器上运行相同的代码时,我获得了所有的outlook标记。 Windows中发生了一些事情,使Tika能够检测到centos上没有的文档类型。元数据显示我调试时:
Windows:Content-Encoding = US-ASCII Generator = Microsoft Word 14(过滤媒体)Content-Type = text / html;字符集= US-ASCII Linux:Content-Encoding = US-ASCII Content-Type = text / plain; charset = US-ASCII
答案 0 :(得分:1)
宣传回答评论......
你错过了一些Tika罐子或它们的依赖
如果您使用命令行Tika App jar,那么您需要的所有内容都在其中,并且它是独立运行的。同样,Tika Server jar完全独立。
对于OSGi类型,你需要Tika Core和Tika Bundle,但这应该是捆绑包含Tika Parsers及其依赖项/参考。
否则,如果您使用Java中的Tika,则需要Tika Core,Tika Parsers以及它们各自的依赖项。如果您依赖tika-core
和tika-parsers
,Maven可以为您提供依赖关系,但您仍需要确保部署方法包含那些依赖项。
如果您错过了Tika Parsers jar和/或其依赖项,那么您仍然会有Tika,但没有解析器,因此解析不会返回内容。您可以通过Tika Config对象获取可用的解析器,并检查您是否拥有所需的所有解析器。