如何从MIME类型确定在Java中适当的文件扩展名(How to determine appropr

2019-07-04 08:13发布

我将文件上传到亚马逊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
    }

Answer 1:

正如一些评论者的的人士指出,没有普遍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类路径中,包括那些太。



文章来源: How to determine appropriate file extension from MIME Type in Java