Tika 在检测到 mime 类型后无法解析

Tika unable to parse after detecting mime-type

我早些时候通过调用 tika.parseToString() 成功地使用 Tika 解析了各种文件,而没有设置任何自定义配置或元数据。现在我需要根据 mime 类型过滤要解析的文件。

我可以用 tika.detect(new BufferedInputStream(inputStream), new Metadata()); 找到 mime 类型,但是当调用 tika.parseToString() 之后 tika 使用 EmptyParser 并且检测到的内容类型是 "application/octet-stream"。这是默认的,意味着 tika 无法找到它是什么类型的文件。在尝试解析文件之前,我尝试在元数据中设置内容类型,但这会导致 org.apache.tika.exception.TikaException: TIKA-198: Illegal IOException。从我读到的内容来看,这意味着文件格式错误,但相同的文件在没有事先检查 mime 类型的情况下被成功解析。

detect() 是否对 InputStream 做了什么,导致解析器无法解析文件?

我使用相同的 tika-instance 来检查 mime 类型和解析,版本 1.13

我的问题是直接将 InputStream 传递给解析方法引起的。 detect() 标记并重置传递的流,InputStream 不支持。将 InputStream 包装成 TikaInputStream(TikaInputStream stream = TikaInputStream.get(new BufferedInputStream(inputStream));) 解决了这个问题。