如何从Java中的MIME类型确定适当的文件扩展名
我正在将文件上传到Amazon
s3存储桶,并可以访问InputStream和一个包含文件的MIME类型而不是原始文件名的字符串。在将文件推送到S3之前,实际由我决定要创建文件名和扩展名。是否有一种库或便捷的方法来确定要从MIME类型使用的适当扩展名?
我已经看到了对Apache
Tika库的一些引用,但是这似乎有点过头了,而且我还无法获得它来成功检测文件扩展名。从我已经收集到的内容来看,这段代码似乎应该可以工作,但是当我的类型变量为“
image / 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
}
回答:
正如一些评论者所指出的那样,mimetypes和文件扩展名之间没有通用的1:1映射…某些mimetypes具有多个可能的扩展名,许多扩展名由多个mimetypes共享,而某些mimetypes没有扩展名。
在任何可能的情况下,最好存储mimetype并继续使用它,而不必考虑扩展名。
就是说,如果您确实想要获得给定mimetype的最常见文件扩展名,那么Tika是一个不错的选择。Apache
Tika拥有大量已知的mimetypes,对于其中许多mimetypes,它也知道mime魔术可用于检测,常见扩展名,描述等。
如果您想获得最常见的JPEG文件扩展名,那么如本Apache
Tika单元测试所示,您只需执行以下操作:
MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); MimeType jpeg = allTypes.forName("image/jpeg");
String jpegExt = jpeg.getExtension(); // .jpg
assertEquals(".jpg", jpeg.getExtension());
关键是您需要加载Tika
jar中捆绑的xml文件,以获取所有mimetypes的定义。如果您也可能要处理自定义的模仿类型,那么Tika支持这些,并将第一行更改为:
TikaConfig config = TikaConfig.getDefaultConfig(); MimeTypes allTypes = config.getMimeRepository();
通过使用TikaConfig方法获取MimeType,Tika还将检查您的类路径中的自定义mimetype定义,并包括这些定义。
以上是 如何从Java中的MIME类型确定适当的文件扩展名 的全部内容, 来源链接: utcz.com/qa/418492.html