当前位置: 首页 > 面试题库 >

如何从Java中的MIME类型确定适当的文件扩展名

梁成双
2023-03-14
问题内容

我正在将文件上传到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定义,并包括这些定义。



 类似资料:
  • 我正在将文件上传到Amazon s3 bucket,并且可以访问InputStream和一个包含文件的MIME类型但不是原始文件名的字符串。在将文件推到S3之前,由我来实际创建文件名和扩展名。是否有库或方便的方法从MIME类型中确定要使用的适当扩展? 我已经看到了一些关于Apache Tika库的引用,但这似乎有些过头了,我还没有能够让它成功地检测到文件扩展名。从我所能收集到的信息来看,这段代码应

  • 问题内容: 假设给了我一个URI,并且我想找到返回的文件的文件扩展名,那么我必须在Java中做什么。 例如,位于http://www.daml.org/2001/08/baseball/baseball- ont 的文件为http://www.daml.org/2001/08/baseball/baseball- ont.owl 当我做 我无法看到带有扩展名的完整文件名,以及如何获取文件扩展名。`

  • 问题内容: 我正在开发具有自己文件格式的Linux应用程序。当您双击那些文件时,我希望打开我的应用程序。 如何在Linux上注册文件扩展名并将其与我的应用程序关联?我正在寻找一种标准方法(可用于基于GNOME和KDE的系统),并且可以在首次安装或运行程序时自动完成。 问题答案: 从freedesktop.org Portland 使用。 注册MIME类型的图标: 创建一个配置文件(freedesk

  • 问题内容: 我正在学习swift,并制作了一个表格,其中包含显示图像的单元格,以及按MIME TYPE(使用路径扩展名)分组的类。我有一个关于扩展的问题。如果图像(例如,可能是视频或pdf)是从Internet上获取的,我不确定它们是否具有扩展名, 如何在不使用路径扩展名的情况下获取文件系统中文件的MIME类型? PS:很抱歉我的英语不好,这不是我的母语 问题答案: 假设您以NSData的形式接收

  • 问题内容: 我正在向程序中添加一些功能,以便可以通过读取MIME数据来准确确定文件类型。我已经尝试了几种方法: 方法1: 方法2: 方法3: 我在http://www.rgagnon.com/javadetails/java-0487.html上找到了这三种方法。但是我的问题是,我正在测试这些方法的文件是我创建的文件,所以我知道它是一个Excel文件,但是除第一个方法(我认为这是由于该方法使用的内

  • 问题内容: 我只是想知道大多数人如何从Java文件中获取mime类型?到目前为止,我已经尝试了两个工具:。 第一个给我内存异常,第二个没有正确关闭其流。我只是想知道其他人是否拥有他们使用和正常工作的方法/库? 问题答案: 不幸, 之所以无法使用,是因为URL的这种使用将文件锁定了,例如,它是不可删除的。 但是,你有: 还有以下内容,其优点是不仅可以使用文件扩展名,而且还可以浏览内容 但是,正如上面