首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向MimetypesFileTypeMap添加Mimetype

向MimetypesFileTypeMap添加Mimetype
EN

Stack Overflow用户
提问于 2011-06-10 14:58:01
回答 3查看 17.1K关注 0票数 13

我在向MimetypesFileTypeMap添加Mimetype时遇到了困难。我尝试添加一个META/mime.type文件,就像文档说的那样。但它似乎并没有被MimetypesFileTypeMap阅读。

我是不是遗漏了什么?

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

更奇怪的是。过路人(安德鲁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. 名为META-INF/mimetypes.default的文件或资源(通常只在activation.jar文件中找到)。(A)

resources.jar (A)如 jwrobel发布的代码所示,Jar实际上似乎是至少两个系统(与JDK一起)上的。

所以鉴于这个消息来源..。

代码语言:javascript
运行
复制
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"));
    }
}

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

但是这个源的输出是..。

代码语言:javascript
运行
复制
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映射的源)表明了最后两个信息源。根本不存在。那么这些信息到底是从哪里来的呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-13 15:18:49

Spring提供了包装类,它附带了一个更新的MIME类型列表。您使用它的方式与使用MimetypesFileTypeMap的方式大致相同。

代码语言:javascript
运行
复制
import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap;
...
ConfigurableMimeFileTypeMap mimeMap = new ConfigurableMimeFileTypeMap();
String contentType = mimeMap.getContentType(uploadedName);//defaults to application/octet-stream
票数 14
EN

Stack Overflow用户

发布于 2011-06-13 16:08:23

为了回答Andrew,我认为MimetypesFileTypeMap正在从MimetypesFileTypeMap获得默认的MIME类型定义

从命令行运行此代码的

代码语言:javascript
运行
复制
ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("META-INF/mimetypes.default"); 
System.out.println(resource.getPath());

产生

代码语言:javascript
运行
复制
file:/usr/java/jdk1.6.0_22/jre/lib/resources.jar!/META-INF/mimetypes.default

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

票数 10
EN

Stack Overflow用户

发布于 2019-05-16 16:29:38

您可以在Javacode中向MimetypesFileTypeMap添加mimetype。

代码语言:javascript
运行
复制
MimetypesFileTypeMap mimeType = new MimetypesFileTypeMap();
mimeType.addMimeTypes("application/pdf pdf");

这里的关键信息是addMimeTypes参数必须是"mime_type扩展“,如上面所示的”应用程序/ pdf“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6308142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档