001package io.jboot.components.http;
002
003import java.util.HashMap;
004import java.util.Map;
005
006public class HttpMimeTypes {
007
008    private static final Map<String, String> defaultMappings = new HashMap<>(200);
009
010    static {
011        defaultMappings.put("txt", "text/plain");
012        defaultMappings.put("css", "text/css");
013        defaultMappings.put("html", "text/html");
014        defaultMappings.put("htm", "text/html");
015        defaultMappings.put("gif", "image/gif");
016        defaultMappings.put("jpg", "image/jpeg");
017        defaultMappings.put("jpe", "image/jpeg");
018        defaultMappings.put("jpeg", "image/jpeg");
019        defaultMappings.put("bmp", "image/bmp");
020        defaultMappings.put("js", "application/javascript");
021        defaultMappings.put("png", "image/png");
022        defaultMappings.put("java", "text/plain");
023        defaultMappings.put("body", "text/html");
024        defaultMappings.put("rtx", "text/richtext");
025        defaultMappings.put("tsv", "text/tab-separated-values");
026        defaultMappings.put("etx", "text/x-setext");
027        defaultMappings.put("json", "application/json");
028        defaultMappings.put("class", "application/java");
029        defaultMappings.put("csh", "application/x-csh");
030        defaultMappings.put("sh", "application/x-sh");
031        defaultMappings.put("tcl", "application/x-tcl");
032        defaultMappings.put("tex", "application/x-tex");
033        defaultMappings.put("texinfo", "application/x-texinfo");
034        defaultMappings.put("texi", "application/x-texinfo");
035        defaultMappings.put("t", "application/x-troff");
036        defaultMappings.put("tr", "application/x-troff");
037        defaultMappings.put("roff", "application/x-troff");
038        defaultMappings.put("man", "application/x-troff-man");
039        defaultMappings.put("me", "application/x-troff-me");
040        defaultMappings.put("ms", "application/x-wais-source");
041        defaultMappings.put("src", "application/x-wais-source");
042        defaultMappings.put("zip", "application/zip");
043        defaultMappings.put("bcpio", "application/x-bcpio");
044        defaultMappings.put("cpio", "application/x-cpio");
045        defaultMappings.put("gtar", "application/x-gtar");
046        defaultMappings.put("shar", "application/x-shar");
047        defaultMappings.put("sv4cpio", "application/x-sv4cpio");
048        defaultMappings.put("sv4crc", "application/x-sv4crc");
049        defaultMappings.put("tar", "application/x-tar");
050        defaultMappings.put("ustar", "application/x-ustar");
051        defaultMappings.put("dvi", "application/x-dvi");
052        defaultMappings.put("hdf", "application/x-hdf");
053        defaultMappings.put("latex", "application/x-latex");
054        defaultMappings.put("bin", "application/octet-stream");
055        defaultMappings.put("oda", "application/oda");
056        defaultMappings.put("pdf", "application/pdf");
057        defaultMappings.put("ps", "application/postscript");
058        defaultMappings.put("eps", "application/postscript");
059        defaultMappings.put("ai", "application/postscript");
060        defaultMappings.put("rtf", "application/rtf");
061        defaultMappings.put("nc", "application/x-netcdf");
062        defaultMappings.put("cdf", "application/x-netcdf");
063        defaultMappings.put("cer", "application/x-x509-ca-cert");
064        defaultMappings.put("exe", "application/octet-stream");
065        defaultMappings.put("gz", "application/x-gzip");
066        defaultMappings.put("Z", "application/x-compress");
067        defaultMappings.put("z", "application/x-compress");
068        defaultMappings.put("hqx", "application/mac-binhex40");
069        defaultMappings.put("mif", "application/x-mif");
070        defaultMappings.put("ico", "image/x-icon");
071        defaultMappings.put("ief", "image/ief");
072        defaultMappings.put("tiff", "image/tiff");
073        defaultMappings.put("tif", "image/tiff");
074        defaultMappings.put("ras", "image/x-cmu-raster");
075        defaultMappings.put("pnm", "image/x-portable-anymap");
076        defaultMappings.put("pbm", "image/x-portable-bitmap");
077        defaultMappings.put("pgm", "image/x-portable-graymap");
078        defaultMappings.put("ppm", "image/x-portable-pixmap");
079        defaultMappings.put("rgb", "image/x-rgb");
080        defaultMappings.put("xbm", "image/x-xbitmap");
081        defaultMappings.put("xpm", "image/x-xpixmap");
082        defaultMappings.put("xwd", "image/x-xwindowdump");
083        defaultMappings.put("au", "audio/basic");
084        defaultMappings.put("snd", "audio/basic");
085        defaultMappings.put("aif", "audio/x-aiff");
086        defaultMappings.put("aiff", "audio/x-aiff");
087        defaultMappings.put("aifc", "audio/x-aiff");
088        defaultMappings.put("wav", "audio/x-wav");
089        defaultMappings.put("mp3", "audio/mpeg");
090        defaultMappings.put("mpeg", "video/mpeg");
091        defaultMappings.put("mpg", "video/mpeg");
092        defaultMappings.put("mpe", "video/mpeg");
093        defaultMappings.put("qt", "video/quicktime");
094        defaultMappings.put("mov", "video/quicktime");
095        defaultMappings.put("avi", "video/x-msvideo");
096        defaultMappings.put("movie", "video/x-sgi-movie");
097        defaultMappings.put("avx", "video/x-rad-screenplay");
098        defaultMappings.put("wrl", "x-world/x-vrml");
099        defaultMappings.put("mpv2", "video/mpeg2");
100        defaultMappings.put("jnlp", "application/x-java-jnlp-file");
101
102        defaultMappings.put("eot", "application/vnd.ms-fontobject");
103        defaultMappings.put("woff", "application/font-woff");
104        defaultMappings.put("woff2", "application/font-woff2");
105        defaultMappings.put("ttf", "application/x-font-ttf");
106        defaultMappings.put("otf", "application/x-font-opentype");
107        defaultMappings.put("sfnt", "application/font-sfnt");
108
109        /* Add XML related MIMEs */
110
111        defaultMappings.put("xml", "application/xml");
112        defaultMappings.put("xhtml", "application/xhtml+xml");
113        defaultMappings.put("xsl", "application/xml");
114        defaultMappings.put("svg", "image/svg+xml");
115        defaultMappings.put("svgz", "image/svg+xml");
116        defaultMappings.put("wbmp", "image/vnd.wap.wbmp");
117        defaultMappings.put("wml", "text/vnd.wap.wml");
118        defaultMappings.put("wmlc", "application/vnd.wap.wmlc");
119        defaultMappings.put("wmls", "text/vnd.wap.wmlscript");
120        defaultMappings.put("wmlscriptc", "application/vnd.wap.wmlscriptc");
121
122        /**
123         * 视频相关
124         */
125        defaultMappings.put("asf", "video/x-ms-asf");
126        defaultMappings.put("asx", "video/x-ms-asf");
127        defaultMappings.put("flv", "video/x-flv");
128        defaultMappings.put("mp4", "video/mp4");
129        defaultMappings.put("mps", "video/x-mpeg");
130        defaultMappings.put("mpv", "video/mpg");
131        defaultMappings.put("mpa", "video/x-mpg");
132        defaultMappings.put("m4e", "video/mpeg4");
133        defaultMappings.put("m2v", "video/x-mpeg");
134        defaultMappings.put("wmv", "video/x-ms-wmv");
135        defaultMappings.put("3gp", "video/3gpp");
136        defaultMappings.put("ts", "video/MP2T");
137
138
139        /**
140         * 音频相关
141         */
142        defaultMappings.put("mp2", "audio/mp2");
143        defaultMappings.put("m3u", "audio/x-mpegurl");
144        defaultMappings.put("m3u8", "audio/x-mpegurl");
145        defaultMappings.put("mpga", "audio/rn-mpeg");
146        defaultMappings.put("ra", "audio/vnd.rn-realaudio");
147        defaultMappings.put("ram", "audio/x-pn-realaudio");
148        defaultMappings.put("wax", "audio/x-ms-wax");
149        defaultMappings.put("wma", "audio/x-ms-wma");
150
151        /**
152         * 文档相关
153         */
154        defaultMappings.put("doc", "application/msword");
155        defaultMappings.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
156        defaultMappings.put("xls", "application/vnd.ms-excel");
157        defaultMappings.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
158        defaultMappings.put("pot", "application/vnd.ms-powerpoint");
159        defaultMappings.put("ppt", "application/vnd.ms-powerpoint");
160        defaultMappings.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
161
162    }
163
164    public static String getMimeType(String file) {
165        String lower = file.toLowerCase();
166        int pos = lower.lastIndexOf('.');
167        if (pos == -1) {
168            return null; //no extension
169        }
170        return defaultMappings.get(lower.substring(pos + 1));
171    }
172
173}