我在将Mimetypes添加到MimetypesFileTypeMap时遇到问题。我已经尝试添加META-INF / mime.types文件,就像Documentation所说的那样。但它似乎没有被MimetypesFileTypeMap读取。
我错过了什么吗?
这是一个Spring / Maven Web项目。任何帮助将不胜感激!
更奇怪的一点。一位路人(Andrew T.)前几天正在对MIME类型进行一些调查。在MimetypesFileTypeMap
JavaDocs。
MimetypesFileTypeMap
查看用户系统中各种位置的MIME类型文件条目。当请求在MimetypesFileTypeMap
中搜索MIME类型时,它按以下顺序搜索MIME类型文件:
MimetypesFileTypeMap
实例。.mime.types
。<java.home>/lib/mime.types
。META-INF/mime.types
。META-INF/mimetypes.default
的文件或资源(通常仅在activation.jar
文件中找到)。的(A) (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映射的来源,建议最后两个信息源。不存在那么来自哪里的信息呢?
答案 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”,如上所示。