将Mimetypes添加到MimetypesFileTypeMap

时间:2011-06-10 14:58:02

标签: java mime-types

我在将Mimetypes添加到MimetypesFileTypeMap时遇到问题。我已经尝试添加META-INF / mime.types文件,就像Documentation所说的那样。但它似乎没有被MimetypesFileTypeMap读取。

我错过了什么吗?

这是一个Spring / Maven Web项目。任何帮助将不胜感激!


更奇怪的一点。一位路人(Andrew T.)前几天正在对MIME类型进行一些调查。在MimetypesFileTypeMap JavaDocs。

中发现了这个文档

MIME类型文件搜索顺序:

MimetypesFileTypeMap查看用户系统中各种位置的MIME类型文件条目。当请求在MimetypesFileTypeMap中搜索MIME类型时,它按以下顺序搜索MIME类型文件:

  1. 以编程方式将条目添加到MimetypesFileTypeMap实例。
  2. 用户主目录中的文件.mime.types
  3. 文件<java.home>/lib/mime.types
  4. 名为META-INF/mime.types
  5. 的文件或资源
  6. 名为META-INF/mimetypes.default的文件或资源(通常仅在activation.jar文件中找到)。的(A)
  7. (A)正如code posted by jwrobel所示,Jar实际上似乎是至少两个系统(使用JDK)的resources.jar


    所以给这个来源..

    import java.io.File;
    import javax.activation.MimetypesFileTypeMap;
    
    class TestMime {
        public static void main(String[] args) {
            System.out.println(System.getProperty("java.version"));
    
            File f = new File(System.getProperty("java.home"), "lib");
            f = new File(f, "mime.types");
            System.out.println(f.exists() + " \t - " +f);
    
            f = new File(System.getProperty("user.home"), ".mime.types");
            System.out.println(f.exists() + " \t - " +f);
    
            MimetypesFileTypeMap mfm = new MimetypesFileTypeMap();
            System.out.println(mfm.getContentType("a.js"));
            System.out.println(mfm.getContentType("a.png"));
            System.out.println(mfm.getContentType("a.jpg"));
            System.out.println(mfm.getContentType("a.au"));
            System.out.println(mfm.getContentType("a.htm"));
        }
    }
    

    ..我们可以排除'1' - 以编程方式添加。我们也可以忘记4&amp; 5如果我们从命令行在没有META-INF的目录中运行它,在类路径上没有activation.jar。只留下选项2&amp; 3。

    然而这个来源的输出是..

    1.6.0
    false    - C:\Program Files\Java\jdk1.6.0\jre\lib\mime.types
    false    - C:\Users\Andrew\.mime.types
    application/octet-stream
    application/octet-stream
    image/jpeg
    audio/basic
    text/html
    Press any key to continue . . .
    

    即。两个文件上的false结果可能是为文件字符串显示的MIME映射的来源,建议最后两个信息源。不存在那么来自哪里的信息呢?

3 个答案:

答案 0 :(得分:11)

Spring提供了a wrapper class,其中包含更新的MIME类型列表。您使用它的方式与使用MimetypesFileTypeMap的方式非常相似。

import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap;
...
ConfigurableMimeFileTypeMap mimeMap = new ConfigurableMimeFileTypeMap();
String contentType = mimeMap.getContentType(uploadedName);//defaults to application/octet-stream

答案 1 :(得分:9)

要回答Andrew Thompson,我认为MimetypesFileTypeMap从/lib/resources.jar:/META-INF/mimetypes.default获取其默认的MIME类型定义。

从命令行运行此代码:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("META-INF/mimetypes.default"); 
System.out.println(resource.getPath());

<强>产量

file:/usr/java/jdk1.6.0_22/jre/lib/resources.jar!/META-INF/mimetypes.default

MimetypesFileTypeMap使用ClassLoader.getResource()加载默认的mimetypes。

答案 2 :(得分:0)

您可以在Javacode中将模仿类型添加到MimetypesFileTypeMap

user

此处的关键信息是addMimeTypes参数,必须为 “ mime_type扩展名”,例如:“ application / pdf pdf”,如上所示。