Java 从DataHandler检测MIME类型

Java 从DataHandler检测MIME类型,java,web-services,mime-types,apache-tika,datahandler,Java,Web Services,Mime Types,Apache Tika,Datahandler,我有一个SOAP Web服务,它提供了一种方法,调用方可以在其中上载PDF、JPG、PNG或BMP文件。 为了正确处理,我需要从DataHandler中获取MIME类型。 我尝试使用Apache Tika获取MIME类型: Tika tika = new Tika(); InputStream stream = dataHandler.getInputStream(); String mimeType = tika.detect(stream); 现在我的问题是: 大多数情况下,Tika检测到

我有一个SOAP Web服务,它提供了一种方法,调用方可以在其中上载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时,它检测到的是
纯文本
,而不是
图像/jpeg
。我怎样才能解决这个问题


提前谢谢你

我不知道Tika出了什么问题,但作为替代方案,您可以尝试一下,它可以做几乎相同的事情,并且做得很好,具有更大的灵活性,因为您可以轻松配置它

// 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);
//定义要使用的mime类型检测器,这里是MagicMimeMimeDetector
//当您打算从流中检测时
//例如,在类的静态块中只执行一次
注册表检测器(“eu.medsea.MimeUtil.detector.magicmimemimeditector”);
...
//获取匹配mime类型的集合
集合mimeTypes=MimeUtil.getMimeTypes(流);

关于类
MimeUtil

的更多详细信息,您使用的是什么版本的Apapche Tika?如果升级会发生什么?哦,你手头有文件名吗?如果给定文件名,Tika可以猜得更好,因为我有当前版本1.13。不幸的是,我没有任何文件名,这就是我需要MIME类型的原因之一;-)不应将有效的jpeg文件检测为文本。假设你在最近的一次夜间构建中遇到了同样的问题,你能打开一个新的Tika bug并上传一个显示问题的文件吗?谢谢,我用MimeUtil试过了,效果非常好。