/src/mochiweb_mime.erl
Erlang | 433 lines | 397 code | 8 blank | 28 comment | 1 complexity | 0d3d54582eb969d815729e31401b5809 MD5 | raw file
Possible License(s): MIT
- %% @author Bob Ippolito <bob@mochimedia.com>
- %% @copyright 2007 Mochi Media, Inc.
- %%
- %% Permission is hereby granted, free of charge, to any person obtaining a
- %% copy of this software and associated documentation files (the "Software"),
- %% to deal in the Software without restriction, including without limitation
- %% the rights to use, copy, modify, merge, publish, distribute, sublicense,
- %% and/or sell copies of the Software, and to permit persons to whom the
- %% Software is furnished to do so, subject to the following conditions:
- %%
- %% The above copyright notice and this permission notice shall be included in
- %% all copies or substantial portions of the Software.
- %%
- %% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- %% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- %% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- %% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- %% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- %% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- %% DEALINGS IN THE SOFTWARE.
- %% @doc Gives a good MIME type guess based on file extension.
- -module(mochiweb_mime).
- -author('bob@mochimedia.com').
- -export([from_extension/1]).
- %% @spec from_extension(S::string()) -> string() | undefined
- %% @doc Given a filename extension (e.g. ".html") return a guess for the MIME
- %% type such as "text/html". Will return the atom undefined if no good
- %% guess is available.
- from_extension(".stl") ->
- "application/SLA";
- from_extension(".stp") ->
- "application/STEP";
- from_extension(".step") ->
- "application/STEP";
- from_extension(".dwg") ->
- "application/acad";
- from_extension(".ez") ->
- "application/andrew-inset";
- from_extension(".ccad") ->
- "application/clariscad";
- from_extension(".drw") ->
- "application/drafting";
- from_extension(".tsp") ->
- "application/dsptype";
- from_extension(".dxf") ->
- "application/dxf";
- from_extension(".xls") ->
- "application/excel";
- from_extension(".unv") ->
- "application/i-deas";
- from_extension(".jar") ->
- "application/java-archive";
- from_extension(".hqx") ->
- "application/mac-binhex40";
- from_extension(".cpt") ->
- "application/mac-compactpro";
- from_extension(".pot") ->
- "application/vnd.ms-powerpoint";
- from_extension(".ppt") ->
- "application/vnd.ms-powerpoint";
- from_extension(".dms") ->
- "application/octet-stream";
- from_extension(".lha") ->
- "application/octet-stream";
- from_extension(".lzh") ->
- "application/octet-stream";
- from_extension(".oda") ->
- "application/oda";
- from_extension(".ogg") ->
- "application/ogg";
- from_extension(".ogm") ->
- "application/ogg";
- from_extension(".pdf") ->
- "application/pdf";
- from_extension(".pgp") ->
- "application/pgp";
- from_extension(".ai") ->
- "application/postscript";
- from_extension(".eps") ->
- "application/postscript";
- from_extension(".ps") ->
- "application/postscript";
- from_extension(".prt") ->
- "application/pro_eng";
- from_extension(".rtf") ->
- "application/rtf";
- from_extension(".smi") ->
- "application/smil";
- from_extension(".smil") ->
- "application/smil";
- from_extension(".sol") ->
- "application/solids";
- from_extension(".vda") ->
- "application/vda";
- from_extension(".xlm") ->
- "application/vnd.ms-excel";
- from_extension(".cod") ->
- "application/vnd.rim.cod";
- from_extension(".pgn") ->
- "application/x-chess-pgn";
- from_extension(".cpio") ->
- "application/x-cpio";
- from_extension(".csh") ->
- "application/x-csh";
- from_extension(".deb") ->
- "application/x-debian-package";
- from_extension(".dcr") ->
- "application/x-director";
- from_extension(".dir") ->
- "application/x-director";
- from_extension(".dxr") ->
- "application/x-director";
- from_extension(".gz") ->
- "application/x-gzip";
- from_extension(".hdf") ->
- "application/x-hdf";
- from_extension(".ipx") ->
- "application/x-ipix";
- from_extension(".ips") ->
- "application/x-ipscript";
- from_extension(".js") ->
- "application/x-javascript";
- from_extension(".skd") ->
- "application/x-koan";
- from_extension(".skm") ->
- "application/x-koan";
- from_extension(".skp") ->
- "application/x-koan";
- from_extension(".skt") ->
- "application/x-koan";
- from_extension(".latex") ->
- "application/x-latex";
- from_extension(".lsp") ->
- "application/x-lisp";
- from_extension(".scm") ->
- "application/x-lotusscreencam";
- from_extension(".mif") ->
- "application/x-mif";
- from_extension(".com") ->
- "application/x-msdos-program";
- from_extension(".exe") ->
- "application/octet-stream";
- from_extension(".cdf") ->
- "application/x-netcdf";
- from_extension(".nc") ->
- "application/x-netcdf";
- from_extension(".pl") ->
- "application/x-perl";
- from_extension(".pm") ->
- "application/x-perl";
- from_extension(".rar") ->
- "application/x-rar-compressed";
- from_extension(".sh") ->
- "application/x-sh";
- from_extension(".shar") ->
- "application/x-shar";
- from_extension(".swf") ->
- "application/x-shockwave-flash";
- from_extension(".sit") ->
- "application/x-stuffit";
- from_extension(".sv4cpio") ->
- "application/x-sv4cpio";
- from_extension(".sv4crc") ->
- "application/x-sv4crc";
- from_extension(".tar.gz") ->
- "application/x-tar-gz";
- from_extension(".tgz") ->
- "application/x-tar-gz";
- from_extension(".tar") ->
- "application/x-tar";
- from_extension(".tcl") ->
- "application/x-tcl";
- from_extension(".texi") ->
- "application/x-texinfo";
- from_extension(".texinfo") ->
- "application/x-texinfo";
- from_extension(".man") ->
- "application/x-troff-man";
- from_extension(".me") ->
- "application/x-troff-me";
- from_extension(".ms") ->
- "application/x-troff-ms";
- from_extension(".roff") ->
- "application/x-troff";
- from_extension(".t") ->
- "application/x-troff";
- from_extension(".tr") ->
- "application/x-troff";
- from_extension(".ustar") ->
- "application/x-ustar";
- from_extension(".src") ->
- "application/x-wais-source";
- from_extension(".zip") ->
- "application/zip";
- from_extension(".tsi") ->
- "audio/TSP-audio";
- from_extension(".au") ->
- "audio/basic";
- from_extension(".snd") ->
- "audio/basic";
- from_extension(".kar") ->
- "audio/midi";
- from_extension(".mid") ->
- "audio/midi";
- from_extension(".midi") ->
- "audio/midi";
- from_extension(".mp2") ->
- "audio/mpeg";
- from_extension(".mp3") ->
- "audio/mpeg";
- from_extension(".mpga") ->
- "audio/mpeg";
- from_extension(".aif") ->
- "audio/x-aiff";
- from_extension(".aifc") ->
- "audio/x-aiff";
- from_extension(".aiff") ->
- "audio/x-aiff";
- from_extension(".m3u") ->
- "audio/x-mpegurl";
- from_extension(".wax") ->
- "audio/x-ms-wax";
- from_extension(".wma") ->
- "audio/x-ms-wma";
- from_extension(".rpm") ->
- "audio/x-pn-realaudio-plugin";
- from_extension(".ram") ->
- "audio/x-pn-realaudio";
- from_extension(".rm") ->
- "audio/x-pn-realaudio";
- from_extension(".ra") ->
- "audio/x-realaudio";
- from_extension(".wav") ->
- "audio/x-wav";
- from_extension(".pdb") ->
- "chemical/x-pdb";
- from_extension(".ras") ->
- "image/cmu-raster";
- from_extension(".gif") ->
- "image/gif";
- from_extension(".ief") ->
- "image/ief";
- from_extension(".jpe") ->
- "image/jpeg";
- from_extension(".jpeg") ->
- "image/jpeg";
- from_extension(".jpg") ->
- "image/jpeg";
- from_extension(".jp2") ->
- "image/jp2";
- from_extension(".png") ->
- "image/png";
- from_extension(".tif") ->
- "image/tiff";
- from_extension(".tiff") ->
- "image/tiff";
- from_extension(".pnm") ->
- "image/x-portable-anymap";
- from_extension(".pbm") ->
- "image/x-portable-bitmap";
- from_extension(".pgm") ->
- "image/x-portable-graymap";
- from_extension(".ppm") ->
- "image/x-portable-pixmap";
- from_extension(".rgb") ->
- "image/x-rgb";
- from_extension(".xbm") ->
- "image/x-xbitmap";
- from_extension(".xwd") ->
- "image/x-xwindowdump";
- from_extension(".iges") ->
- "model/iges";
- from_extension(".igs") ->
- "model/iges";
- from_extension(".mesh") ->
- "model/mesh";
- from_extension(".") ->
- "";
- from_extension(".msh") ->
- "model/mesh";
- from_extension(".silo") ->
- "model/mesh";
- from_extension(".vrml") ->
- "model/vrml";
- from_extension(".wrl") ->
- "model/vrml";
- from_extension(".css") ->
- "text/css";
- from_extension(".htm") ->
- "text/html";
- from_extension(".html") ->
- "text/html";
- from_extension(".asc") ->
- "text/plain";
- from_extension(".c") ->
- "text/plain";
- from_extension(".cc") ->
- "text/plain";
- from_extension(".f90") ->
- "text/plain";
- from_extension(".f") ->
- "text/plain";
- from_extension(".hh") ->
- "text/plain";
- from_extension(".m") ->
- "text/plain";
- from_extension(".txt") ->
- "text/plain";
- from_extension(".rtx") ->
- "text/richtext";
- from_extension(".sgm") ->
- "text/sgml";
- from_extension(".sgml") ->
- "text/sgml";
- from_extension(".tsv") ->
- "text/tab-separated-values";
- from_extension(".jad") ->
- "text/vnd.sun.j2me.app-descriptor";
- from_extension(".etx") ->
- "text/x-setext";
- from_extension(".xml") ->
- "application/xml";
- from_extension(".dl") ->
- "video/dl";
- from_extension(".fli") ->
- "video/fli";
- from_extension(".flv") ->
- "video/x-flv";
- from_extension(".gl") ->
- "video/gl";
- from_extension(".mp4") ->
- "video/mp4";
- from_extension(".mpe") ->
- "video/mpeg";
- from_extension(".mpeg") ->
- "video/mpeg";
- from_extension(".mpg") ->
- "video/mpeg";
- from_extension(".mov") ->
- "video/quicktime";
- from_extension(".qt") ->
- "video/quicktime";
- from_extension(".viv") ->
- "video/vnd.vivo";
- from_extension(".vivo") ->
- "video/vnd.vivo";
- from_extension(".asf") ->
- "video/x-ms-asf";
- from_extension(".asx") ->
- "video/x-ms-asx";
- from_extension(".wmv") ->
- "video/x-ms-wmv";
- from_extension(".wmx") ->
- "video/x-ms-wmx";
- from_extension(".wvx") ->
- "video/x-ms-wvx";
- from_extension(".avi") ->
- "video/x-msvideo";
- from_extension(".movie") ->
- "video/x-sgi-movie";
- from_extension(".mime") ->
- "www/mime";
- from_extension(".ice") ->
- "x-conference/x-cooltalk";
- from_extension(".vrm") ->
- "x-world/x-vrml";
- from_extension(".spx") ->
- "audio/ogg";
- from_extension(".xhtml") ->
- "application/xhtml+xml";
- from_extension(".bz2") ->
- "application/x-bzip2";
- from_extension(".doc") ->
- "application/msword";
- from_extension(".z") ->
- "application/x-compress";
- from_extension(".ico") ->
- "image/x-icon";
- from_extension(".bmp") ->
- "image/bmp";
- from_extension(".m4a") ->
- "audio/mpeg";
- from_extension(".csv") ->
- "text/csv";
- from_extension(".eot") ->
- "application/vnd.ms-fontobject";
- from_extension(".m4v") ->
- "video/mp4";
- from_extension(".svg") ->
- "image/svg+xml";
- from_extension(".svgz") ->
- "image/svg+xml";
- from_extension(".ttc") ->
- "application/x-font-ttf";
- from_extension(".ttf") ->
- "application/x-font-ttf";
- from_extension(".vcf") ->
- "text/x-vcard";
- from_extension(".webm") ->
- "video/web";
- from_extension(".webp") ->
- "image/web";
- from_extension(".woff") ->
- "application/x-font-woff";
- from_extension(".otf") ->
- "font/opentype";
- from_extension(_) ->
- undefined.
- %%
- %% Tests
- %%
- -ifdef(TEST).
- -include_lib("eunit/include/eunit.hrl").
- exhaustive_from_extension_test() ->
- T = mochiweb_cover:clause_lookup_table(?MODULE, from_extension),
- [?assertEqual(V, from_extension(K)) || {K, V} <- T].
- from_extension_test() ->
- ?assertEqual("text/html",
- from_extension(".html")),
- ?assertEqual(undefined,
- from_extension("")),
- ?assertEqual(undefined,
- from_extension(".wtf")),
- ok.
- -endif.