This project has retired. For details please refer to its Attic page.
MimeTypes xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.commons.impl;
20  
21  import java.io.File;
22  import java.net.URLConnection;
23  import java.util.HashMap;
24  import java.util.Map;
25  
26  public class MimeTypes {
27  
28      private static final Map<String, String> EXT2MIME = new HashMap<String, String>();
29      private static final Map<String, String> MIME2EXT = new HashMap<String, String>();
30      
31      private MimeTypes() {
32      }
33  
34      static {
35          // extension to MIME type
36          EXT2MIME.put("", "application/octet-stream");
37          EXT2MIME.put("ai", "application/postscript");
38          EXT2MIME.put("aif", "audio/x-aiff");
39          EXT2MIME.put("aifc", "audio/x-aiff");
40          EXT2MIME.put("aiff", "audio/x-aiff");
41          EXT2MIME.put("asf", "video/x-ms-asf");
42          EXT2MIME.put("asr", "video/x-ms-asf");
43          EXT2MIME.put("asx", "video/x-ms-asf");
44          EXT2MIME.put("au", "audio/basic");
45          EXT2MIME.put("avi", "video/x-msvideo");
46          EXT2MIME.put("axs", "application/olescript");
47          EXT2MIME.put("bas", "text/plain");
48          EXT2MIME.put("bmp", "image/bmp");
49          EXT2MIME.put("c", "text/plain");
50          EXT2MIME.put("cat", "application/vnd.ms-pkiseccat");
51          EXT2MIME.put("cdf", "application/x-cdf");
52          EXT2MIME.put("cer", "application/x-x509-ca-cert");
53          EXT2MIME.put("clp", "application/x-msclip");
54          EXT2MIME.put("cmx", "image/x-cmx");
55          EXT2MIME.put("cod", "image/cis-cod");
56          EXT2MIME.put("cpio", "application/x-cpio");
57          EXT2MIME.put("crd", "application/x-mscardfile");
58          EXT2MIME.put("crl", "application/pkix-crl");
59          EXT2MIME.put("crt", "application/x-x509-ca-cert");
60          EXT2MIME.put("csh", "application/x-csh");
61          EXT2MIME.put("css", "text/css");
62          EXT2MIME.put("dll", "application/x-msdownload");
63          EXT2MIME.put("doc", "application/msword");
64          EXT2MIME.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
65          EXT2MIME.put("doct", "application/vnd.openxmlformats-officedocument.wordprocessingml.template");
66          EXT2MIME.put("dot", "application/msword");
67          EXT2MIME.put("dvi", "application/x-dvi");
68          EXT2MIME.put("dxr", "application/x-director");
69          EXT2MIME.put("eps", "application/postscript");
70          EXT2MIME.put("etx", "text/x-setext");
71          EXT2MIME.put("evy", "application/envoy");
72          EXT2MIME.put("fif", "application/fractals");
73          EXT2MIME.put("flr", "x-world/x-vrml");
74          EXT2MIME.put("gif", "image/gif");
75          EXT2MIME.put("gtar", "application/x-gtar");
76          EXT2MIME.put("gz", "application/x-gzip");
77          EXT2MIME.put("h", "text/plain");
78          EXT2MIME.put("hdf", "application/x-hdf");
79          EXT2MIME.put("hlp", "application/winhlp");
80          EXT2MIME.put("hqx", "application/mac-binhex40");
81          EXT2MIME.put("hta", "application/hta");
82          EXT2MIME.put("htc", "text/x-component");
83          EXT2MIME.put("htm", "text/html");
84          EXT2MIME.put("html", "text/html");
85          EXT2MIME.put("htt", "text/webviewhtml");
86          EXT2MIME.put("ico", "image/x-icon");
87          EXT2MIME.put("ief", "image/ief");
88          EXT2MIME.put("iii", "application/x-iphone");
89          EXT2MIME.put("isp", "application/x-internet-signup");
90          EXT2MIME.put("jfif", "image/pipeg");
91          EXT2MIME.put("jpe", "image/jpeg");
92          EXT2MIME.put("jpeg", "image/jpeg");
93          EXT2MIME.put("jpg", "image/jpeg");
94          EXT2MIME.put("js", "application/x-javascript");
95          EXT2MIME.put("latex", "application/x-latex");
96          EXT2MIME.put("lsf", "video/x-la-asf");
97          EXT2MIME.put("lsx", "video/x-la-asf");
98          EXT2MIME.put("m3u", "audio/x-mpegurl");
99          EXT2MIME.put("man", "application/x-troff-man");
100         EXT2MIME.put("mdb", "application/x-msaccess");
101         EXT2MIME.put("me", "application/x-troff-me");
102         EXT2MIME.put("mhtv", "message/rfc822");
103         EXT2MIME.put("mhtml", "message/rfc822");
104         EXT2MIME.put("mid", "audio/mid");
105         EXT2MIME.put("mov", "video/quicktime");
106         EXT2MIME.put("movie", "video/x-sgi-movie");
107         EXT2MIME.put("mp2", "video/mpeg");
108         EXT2MIME.put("mp3", "audio/mpeg");
109         EXT2MIME.put("mpa", "video/mpeg");
110         EXT2MIME.put("mpe", "video/mpegv");
111         EXT2MIME.put("mpeg", "video/mpeg");
112         EXT2MIME.put("mpg", "video/mpegv");
113         EXT2MIME.put("mpp", "application/vnd.ms-project");
114         EXT2MIME.put("mpv2", "video/mpeg");
115         EXT2MIME.put("ms", "application/x-troff-ms");
116         EXT2MIME.put("mvb", "application/x-msmediaview");
117         EXT2MIME.put("nws", "message/rfc822");
118         EXT2MIME.put("oda", "application/oda");
119         EXT2MIME.put("p10", "application/pkcs10");
120         EXT2MIME.put("p12", "application/x-pkcs12v");
121         EXT2MIME.put("p7b", "application/x-pkcs7-certificates");
122         EXT2MIME.put("p7c", "application/x-pkcs7-mime");
123         EXT2MIME.put("p7m", "application/x-pkcs7-mime");
124         EXT2MIME.put("p7r", "application/x-pkcs7-certreqresp");
125         EXT2MIME.put("p7s", "application/x-pkcs7-signature");
126         EXT2MIME.put("pbm", "image/x-portable-bitmap");
127         EXT2MIME.put("pdf", "application/pdf");
128         EXT2MIME.put("pfx", "application/x-pkcs12");
129         EXT2MIME.put("pgm", "image/x-portable-graymap");
130         EXT2MIME.put("vpko", "application/ynd.ms-pkipko");
131         EXT2MIME.put("pma", "application/x-perfmon");
132         EXT2MIME.put("pmc", "application/x-perfmon");
133         EXT2MIME.put("pml", "application/x-perfmon");
134         EXT2MIME.put("pmr", "application/x-perfmon");
135         EXT2MIME.put("pmw", "application/x-perfmon");
136         EXT2MIME.put("png", "image/png");
137         EXT2MIME.put("pnm", "image/x-portable-anymap");
138         EXT2MIME.put("pot", "application/vnd.ms-powerpoint");
139         EXT2MIME.put("ppm", "image/x-portable-pixmap");
140         EXT2MIME.put("pps", "application/vnd.ms-powerpoint");
141         EXT2MIME.put("ppt", "application/vnd.ms-powerpoint");
142         EXT2MIME.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
143         EXT2MIME.put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow");
144         EXT2MIME.put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template");
145         EXT2MIME.put("prf", "application/pics-rules");
146         EXT2MIME.put("ps", "application/postscript");
147         EXT2MIME.put("pub", "application/x-mspublisher");
148         EXT2MIME.put("qt", "video/quicktime");
149         EXT2MIME.put("ra", "audio/x-pn-realaudio");
150         EXT2MIME.put("ram", "audio/x-pn-realaudio");
151         EXT2MIME.put("ras", "image/x-cmu-raster");
152         EXT2MIME.put("rgb", "image/x-rgb");
153         EXT2MIME.put("rmi", "audio/mid");
154         EXT2MIME.put("roff", "application/x-troff");
155         EXT2MIME.put("rtf", "application/rtf");
156         EXT2MIME.put("rtx", "text/richtext");
157         EXT2MIME.put("scd", "application/x-msschedule");
158         EXT2MIME.put("sct", "text/scriptlet");
159         EXT2MIME.put("sh", "application/x-sh");
160         EXT2MIME.put("shar", "application/x-shar");
161         EXT2MIME.put("sit", "application/x-stuffit");
162         EXT2MIME.put("snd", "audio/basic");
163         EXT2MIME.put("spc", "application/x-pkcs7-certificates");
164         EXT2MIME.put("spl", "application/futuresplash");
165         EXT2MIME.put("src", "application/x-wais-source");
166         EXT2MIME.put("sst", "application/vnd.ms-pkicertstore");
167         EXT2MIME.put("stl", "application/vnd.ms-pkistl");
168         EXT2MIME.put("stm", "text/html");
169         EXT2MIME.put("svg", "image/svg+xml");
170         EXT2MIME.put("swf", "application/x-shockwave-flash");
171         EXT2MIME.put("t", "application/x-troff");
172         EXT2MIME.put("tar", "application/x-tar");
173         EXT2MIME.put("tcl", "application/x-tcl");
174         EXT2MIME.put("tex", "application/x-tex");
175         EXT2MIME.put("texi", "application/x-texinfo");
176         EXT2MIME.put("texinfo", "application/x-texinfo");
177         EXT2MIME.put("tgz", "application/x-compressed");
178         EXT2MIME.put("tif", "image/tiff");
179         EXT2MIME.put("tiff", "image/tiff");
180         EXT2MIME.put("tr", "application/x-troff");
181         EXT2MIME.put("trm", "application/x-msterminal");
182         EXT2MIME.put("tsv", "text/tab-separated-values");
183         EXT2MIME.put("txt", "text/plain");
184         EXT2MIME.put("uls", "text/iuls");
185         EXT2MIME.put("ustar", "application/x-ustar");
186         EXT2MIME.put("vcf", "text/x-vcard");
187         EXT2MIME.put("vrml", "x-world/x-vrml");
188         EXT2MIME.put("wav", "audio/x-wav");
189         EXT2MIME.put("wcm", "application/vnd.ms-works");
190         EXT2MIME.put("wdb", "application/vnd.ms-works");
191         EXT2MIME.put("wmf", "application/x-msmetafile");
192         EXT2MIME.put("wps", "application/vnd.ms-works");
193         EXT2MIME.put("wri", "application/x-mswrite");
194         EXT2MIME.put("wrl", "x-world/x-vrml");
195         EXT2MIME.put("wrz", "x-world/x-vrml");
196         EXT2MIME.put("xaf", "x-world/x-vrml");
197         EXT2MIME.put("xbm", "image/x-xbitmap");
198         EXT2MIME.put("xla", "application/vnd.ms-excel");
199         EXT2MIME.put("xlc", "application/vnd.ms-excel");
200         EXT2MIME.put("xlm", "application/vnd.ms-excel");
201         EXT2MIME.put("xls", "application/vnd.ms-excel");
202         EXT2MIME.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
203         EXT2MIME.put("xlt", "application/vnd.ms-excel");
204         EXT2MIME.put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template");
205         EXT2MIME.put("xlw", "application/vnd.ms-excel");
206         EXT2MIME.put("xml", "text/xml");
207         EXT2MIME.put("xof", "x-world/x-vrml");
208         EXT2MIME.put("xpm", "image/x-xpixmap");
209         EXT2MIME.put("xwd", "image/x-xwindowdump");
210         EXT2MIME.put("z", "application/x-compress");
211         EXT2MIME.put("zip", "application/zip");
212 
213         // MIME type to extension
214         MIME2EXT.put("application/octet-stream", "");
215         MIME2EXT.put("application/envoy", "evy");
216         MIME2EXT.put("application/fractals", "fif");
217         MIME2EXT.put("application/futuresplash", "spl");
218         MIME2EXT.put("application/hta", "hta");
219         MIME2EXT.put("application/mac-binhex40", "hqx");
220         MIME2EXT.put("application/msword", "doc");
221         MIME2EXT.put("application/oda", "oda");
222         MIME2EXT.put("application/olescript", "axs");
223         MIME2EXT.put("application/pdf", "pdf");
224         MIME2EXT.put("application/pics-rules", "prf");
225         MIME2EXT.put("application/pkcs10", "p10");
226         MIME2EXT.put("application/pkix-crl", "crl");
227         MIME2EXT.put("application/postscript", "ps");
228         MIME2EXT.put("application/rtf", "rtf");
229         MIME2EXT.put("application/vnd.ms-excel", "xls");
230         MIME2EXT.put("application/vnd.ms-pkicertstore", "sst");
231         MIME2EXT.put("application/vnd.ms-pkiseccat", "cat");
232         MIME2EXT.put("application/vnd.ms-pkistl", "stl");
233         MIME2EXT.put("application/vnd.ms-powerpoint", "ppt");
234         MIME2EXT.put("application/vnd.ms-project", "mpp");
235         MIME2EXT.put("application/vnd.ms-works", "wps");
236         MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx");
237         MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx");
238         MIME2EXT.put("application/vnd.openxmlformats-officedocument.presentationml.template", "potx");
239         MIME2EXT.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx");
240         MIME2EXT.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx");
241         MIME2EXT.put("application/winhlp", "hlp");
242         MIME2EXT.put("application/x-cdf", "cdf");
243         MIME2EXT.put("application/x-compress", "z");
244         MIME2EXT.put("application/x-compressed", "tgz");
245         MIME2EXT.put("application/x-cpio", "cpio");
246         MIME2EXT.put("application/x-csh", "csh");
247         MIME2EXT.put("application/x-director", "dxr");
248         MIME2EXT.put("application/x-dvi", "dvi");
249         MIME2EXT.put("application/x-gtar", "gtar");
250         MIME2EXT.put("application/x-gzip", "gz");
251         MIME2EXT.put("application/x-hdf", "hdf");
252         MIME2EXT.put("application/x-internet-signup", "isp");
253         MIME2EXT.put("application/x-iphone", "iii");
254         MIME2EXT.put("application/x-javascript", "js");
255         MIME2EXT.put("application/x-latex", "latex");
256         MIME2EXT.put("application/x-msaccess", "mdb");
257         MIME2EXT.put("application/x-mscardfile", "crd");
258         MIME2EXT.put("application/x-msclip", "clp");
259         MIME2EXT.put("application/x-msdownload", "dll");
260         MIME2EXT.put("application/x-msmediaview", "mvb");
261         MIME2EXT.put("application/x-msmetafile", "wmf");
262         MIME2EXT.put("application/x-mspublisher", "pub");
263         MIME2EXT.put("application/x-msschedule", "scd");
264         MIME2EXT.put("application/x-msterminal", "trm");
265         MIME2EXT.put("application/x-mswrite", "wri");
266         MIME2EXT.put("application/x-perfmon", "pmw");
267         MIME2EXT.put("application/x-pkcs12", "pfx");
268         MIME2EXT.put("application/x-pkcs12v", "p12");
269         MIME2EXT.put("application/x-pkcs7-certificates", "p7b");
270         MIME2EXT.put("application/x-pkcs7-certificates", "spc");
271         MIME2EXT.put("application/x-pkcs7-certreqresp", "p7r");
272         MIME2EXT.put("application/x-pkcs7-mime", "p7m");
273         MIME2EXT.put("application/x-pkcs7-signature", "p7s");
274         MIME2EXT.put("application/x-sh", "sh");
275         MIME2EXT.put("application/x-shar", "shar");
276         MIME2EXT.put("application/x-shockwave-flash", "swf");
277         MIME2EXT.put("application/x-stuffit", "sit");
278         MIME2EXT.put("application/x-tar", "tar");
279         MIME2EXT.put("application/x-tcl", "tcl");
280         MIME2EXT.put("application/x-tex", "tex");
281         MIME2EXT.put("application/x-texinfo", "texinfo");
282         MIME2EXT.put("application/x-troff-man", "man");
283         MIME2EXT.put("application/x-troff-me", "me");
284         MIME2EXT.put("application/x-troff-ms", "ms");
285         MIME2EXT.put("application/x-troff", "tr");
286         MIME2EXT.put("application/x-ustar", "ustar");
287         MIME2EXT.put("application/x-wais-source", "src");
288         MIME2EXT.put("application/x-x509-ca-cert", "cer");
289         MIME2EXT.put("application/ynd.ms-pkipko", "vpko");
290         MIME2EXT.put("application/zip", "zip");
291         MIME2EXT.put("audio/basic", "snd");
292         MIME2EXT.put("audio/mid", "mid");
293         MIME2EXT.put("audio/mpeg", "mp3");
294         MIME2EXT.put("audio/x-aiff", "aif");
295         MIME2EXT.put("audio/x-mpegurl", "m3u");
296         MIME2EXT.put("audio/x-pn-realaudio", "ram");
297         MIME2EXT.put("audio/x-wav", "wav");
298         MIME2EXT.put("doct", "application/vnd.openxmlformats-officedocument.wordprocessingml.template");
299         MIME2EXT.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
300         MIME2EXT.put("image/bmp", "bmp");
301         MIME2EXT.put("image/cis-cod", "cod");
302         MIME2EXT.put("image/gif", "gif");
303         MIME2EXT.put("image/ief", "ief");
304         MIME2EXT.put("image/jpeg", "jpeg");
305         MIME2EXT.put("image/pipeg", "jfif");
306         MIME2EXT.put("image/png", "png");
307         MIME2EXT.put("image/svg+xml", "svg");
308         MIME2EXT.put("image/tiff", "tiff");
309         MIME2EXT.put("image/x-cmu-raster", "ras");
310         MIME2EXT.put("image/x-cmx", "cmx");
311         MIME2EXT.put("image/x-icon", "ico");
312         MIME2EXT.put("image/x-portable-anymap", "pnm");
313         MIME2EXT.put("image/x-portable-bitmap", "pbm");
314         MIME2EXT.put("image/x-portable-graymap", "pgm");
315         MIME2EXT.put("image/x-portable-pixmap", "ppm");
316         MIME2EXT.put("image/x-rgb", "rgb");
317         MIME2EXT.put("image/x-xbitmap", "xbm");
318         MIME2EXT.put("image/x-xpixmap", "xpm");
319         MIME2EXT.put("image/x-xwindowdump", "xwd");
320         MIME2EXT.put("message/rfc822", "mhtml");
321         MIME2EXT.put("text/css", "css");
322         MIME2EXT.put("text/html", "html");
323         MIME2EXT.put("text/iuls", "uls");
324         MIME2EXT.put("text/plain", "txt");
325         MIME2EXT.put("text/richtext", "rtx");
326         MIME2EXT.put("text/scriptlet", "sct");
327         MIME2EXT.put("text/tab-separated-values", "tsv");
328         MIME2EXT.put("text/webviewhtml", "htt");
329         MIME2EXT.put("text/x-component", "htc");
330         MIME2EXT.put("text/x-setext", "etx");
331         MIME2EXT.put("text/x-vcard", "vcf");
332         MIME2EXT.put("text/xml", "xml");
333         MIME2EXT.put("video/mpeg", "mpeg");
334         MIME2EXT.put("video/mpegv", "mpe");
335         MIME2EXT.put("video/quicktime", "mov");
336         MIME2EXT.put("video/quicktime", "qt");
337         MIME2EXT.put("video/x-la-asf", "lsf");
338         MIME2EXT.put("video/x-la-asf", "lsx");
339         MIME2EXT.put("video/x-ms-asf", "asf");
340         MIME2EXT.put("video/x-msvideo", "avi");
341         MIME2EXT.put("video/x-sgi-movie", "movie");
342         MIME2EXT.put("x-world/x-vrml", "vrml");
343     }
344 
345     /**
346      * Returns the MIME type for file extension.
347      */
348     public static String getMIMEType(String ext) {
349         if (ext == null) {
350             return EXT2MIME.get("");
351         }
352 
353         int x = ext.lastIndexOf('.');
354         if (x > -1) {
355             ext = ext.substring(x + 1);
356         }
357 
358         String mime = EXT2MIME.get(ext.toLowerCase());
359         if (mime == null) {
360             mime = URLConnection.getFileNameMap().getContentTypeFor("x." + ext);
361         }
362         if (mime == null) {
363             mime = EXT2MIME.get("");
364         }
365 
366         return mime;
367     }
368 
369     /**
370      * Returns the MIME type for a file.
371      */
372     public static String getMIMEType(File file) {
373         if (file == null) {
374             return getMIMEType("");
375         }
376 
377         return getMIMEType(file.getName());
378     }
379 
380     /**
381      * Guesses a extension from a MIME type.
382      */
383     public static String getExtension(String mimeType) {
384         if (mimeType == null) {
385             return "";
386         }
387 
388         int x = mimeType.indexOf(';');
389         if (x > -1) {
390             mimeType = mimeType.substring(0, x);
391         }
392         mimeType = mimeType.trim().toLowerCase();
393 
394         String extension = MIME2EXT.get(mimeType);
395         return ((extension == null || extension.length() == 0) ? "" : "." + extension);
396     }
397 }