工作中需要用到根据文件后缀名称判断MimeType的场景,找到几种方式,记录一下。

判断ContentType

方式一 MimetypesFileTypeMap

MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType("xxx.ext");

此类在javax.activation包下,java11已经移除了javax,不建议使用,同时部分文件无法正确获取到Content-Type。
可通过addMimeTypes(String mime_types)方式添加解析。

方式二 URLConnection

URLConnection.getFileNameMap().getContentTypeFor("xxx.ext");

部分后缀获取不到,比如svg格式的图片,无法正确获取到ContentType。

方式三 ApplicationContext

//HttpServletRequest request
request.getServletContext().getMimeType("xxx.ext")

此种方式依赖Spring,如果是Spring环境,建议使用此种方式。此方式适配性较好。

如果部分后缀不识别,可通过以下方式进行添加:

@Configuration
public class MimeMappingConfig implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
        mappings.add("xxx", "application/xml; charset=utf-8");
        factory.setMimeMappings(mappings);
    }
}