我将文件上传到亚马逊S3存储和访问的InputStream和包含该文件的MIME类型,但不是原来的文件名的字符串。 这是给我推文件最多S3之前实际创建的文件名和扩展名。 是否有一个图书馆或方便的方法来确定适当的延伸,从MIME类型使用?
我已经看到了Apache提卡库提供一些参考,但似乎有点小题大做,我一直没能得到它成功地检测文件扩展名呢。 从我已经能够收集似乎这样的代码应该工作,但我刚开始的时候我喜欢的类型变量为“图像/ JPEG”空字符串
MimeType mimeType = null;
try {
mimeType = new MimeTypes().forName(type);
} catch (MimeTypeException e) {
Logger.error("Couldn't Detect Mime Type for type: " + type, e);
}
if (mimeType != null) {
String extension = mimeType.getExtension();
//do something with the extension
}
正如一些评论者的的人士指出,没有普遍1:MIME类型和文件扩展名之间的一对一映射...一些MIME类型有不止一个可能的扩展,许多扩展由多个MIME类型共享,以及一些MIME类型没有扩展名。
只要有可能,你就要去存储MIME类型和使用该前进,而忘记了扩展好得多。
也就是说,如果你想获得一个给定的MIME类型最常见的文件扩展名,然后提卡是一个很好的路要走。 阿帕奇提卡有非常大的一套它知道的MIME类型,并为许多的这些它也知道了检测,常用的扩展,描述等哑剧魔术
如果你想获得一个JPEG文件最常见的扩展,那么如图中这种的Apache提卡单元测试,您需要做的仅仅是这样的:
MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
MimeType jpeg = allTypes.forName("image/jpeg");
String jpegExt = jpeg.getExtension(); // .jpg
assertEquals(".jpg", jpeg.getExtension());
关键的一点是,你需要加载了该公司在提卡罐子捆绑把所有的MIME类型的定义XML文件。 如果你可以自定义MIME类型来处理过,然后提卡支持这些,变线之一是:
TikaConfig config = TikaConfig.getDefaultConfig();
MimeTypes allTypes = config.getMimeRepository();
通过使用TikaConfig方法获取MIME类型,蒂卡也将检查你的自定义MIME类型defintions类路径中,包括那些太。