从 DataHandler 检测 MIME 类型

Detecting MIME-Type from DataHandler

我有一个 SOAP-WebService,它提供了一种调用方可以上传 PDF、JPG、PNG 或 BMP 文件的方法。 为了正确处理,我需要从 DataHandler 中获取 MIME 类型。 我尝试使用 Apache Tika 获取 MIME 类型:

Tika tika = new Tika();
InputStream stream = dataHandler.getInputStream();
String mimeType = tika.detect(stream);

现在我的问题是:

大多数情况下,Tika 会检测到正确的 MIME 类型,但在少数上传 JPG 的情况下,它会检测到 plain/text 而不是 image/jpeg。我该如何解决?

提前致谢!

我不知道 Tika 有什么问题,但作为替代方案,您可以尝试 MimeUtil,它几乎可以做同样的事情,而且做得很好,而且更灵活,因为您可以轻松配置它。

// Define the mime type detector to use, here it will be MagicMimeMimeDetector
// As you intend to detect from a Stream
// To be done only once in a static block of your class for example    
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
...
// Get the collection of matching mime types
Collection<?> mimeTypes = MimeUtil.getMimeTypes(stream);

有关 class MimeUtil here 的更多详细信息。