如何从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

回到顶部