#region Imports
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
using System.Configuration;
using System.IO;
#endregion
public static class MimeMap
{
public const string ApplicationOctetStream = "application/octet-stream";
private static readonly Dictionary<string, string> _map;
static MimeMap()
{
_map = CreateDefaultMap();
}
public static string ContentTypeFromPath(string path)
{
return ContentTypeFromExtension(Path.GetExtension(path));
}
public static string ContentTypeFromExtension(string extension)
{
extension = extension ?? string.Empty;
if (extension.Length > 0)
{
if (extension[0] != '.')
throw new ArgumentOutOfRangeException("extension");
if (extension.Length == 1)
extension = string.Empty;
}
var contentType = _map[extension];
return !string.IsNullOrEmpty(contentType) ? contentType : ApplicationOctetStream;
}
#region Default MIME map
private static Dictionary<string, string> CreateDefaultMap()
{
var map = new Dictionary<string, string>(
/* capacity */ 220,
/* comparer */ StringComparer.OrdinalIgnoreCase)
{
{ ".323" , "text/h323" },
{ ".asx" , "video/x-ms-asf" },
{ ".acx" , "application/internet-property-stream" },
{ ".ai" , "application/postscript" },
{ ".aif" , "audio/x-aiff" },
{ ".aiff" , "audio/aiff" },
{ ".axs" , "application/olescript" },
{ ".aifc" , "audio/aiff" },
{ ".asr" , "video/x-ms-asf" },
{ ".avi" , "video/x-msvideo" },
{ ".asf" , "video/x-ms-asf" },
{ ".au" , "audio/basic" },
{ ".bin" , "application/octet-stream" },
{ ".bas" , "text/plain" },
{ ".bcpio" , "application/x-bcpio" },
{ ".bmp" , "image/bmp" },
{ ".cdf" , "application/x-cdf" },
{ ".cat" , "application/vndms-pkiseccat" },
{ ".crt" , "application/x-x509-ca-cert" },
{ ".c" , "text/plain" },
{ ".css" , "text/css" },
{ ".cer" , "application/x-x509-ca-cert" },
{ ".crl" , "application/pkix-crl" },
{ ".cmx" , "image/x-cmx" },
{ ".csh" , "application/x-csh" },
{ ".cod" , "image/cis-cod" },
{ ".cpio" , "application/x-cpio" },
{ ".clp" , "application/x-msclip" },
{ ".crd" , "application/x-mscardfile" },
{ ".dll" , "application/x-msdownload" },
{ ".dot" , "application/msword" },
{ ".doc" , "application/msword" },
{ ".dvi" , "application/x-dvi" },
{ ".dir" , "application/x-director" },
{ ".dxr" , "application/x-director" },
{ ".der" , "application/x-x509-ca-cert" },
{ ".dib" , "image/bmp" },
{ ".dcr" , "application/x-director" },
{ ".disco" , "text/xml" },
{ ".exe" , "application/octet-stream" },
{ ".etx" , "text/x-setext" },
{ ".evy" , "application/envoy" },
{ ".eml" , "message/rfc822" },
{ ".eps" , "application/postscript" },
{ ".flr" , "x-world/x-vrml" },
{ ".fif" , "application/fractals" },
{ ".gtar" , "application/x-gtar" },
{ ".gif" , "image/gif" },
{ ".gz" , "application/x-gzip" },
{ ".hta" , "application/hta" },
{ ".htc" , "text/x-component" },
{ ".htt" , "text/webviewhtml" },
{ ".h" , "text/plain" },
{ ".hdf" , "application/x-hdf" },
{ ".hlp" , "application/winhlp" },
{ ".html" , "text/html" },
{ ".htm" , "text/html" },
{ ".hqx" , "application/mac-binhex40" },
{ ".isp" , "application/x-internet-signup" },
{ ".iii" , "application/x-iphone" },
{ ".ief" , "image/ief" },
{ ".ivf" , "video/x-ivf" },
{ ".ins" , "application/x-internet-signup" },
{ ".ico" , "image/x-icon" },
{ ".jpg" , "image/jpeg" },
{ ".jfif" , "image/pjpeg" },
{ ".jpe" , "image/jpeg" },
{ ".jpeg" , "image/jpeg" },
{ ".js" , "application/x-javascript" },
{ ".lsx" , "video/x-la-asf" },
{ ".latex" , "application/x-latex" },
{ ".lsf" , "video/x-la-asf" },
{ ".mhtml" , "message/rfc822" },
{ ".mny" , "application/x-msmoney" },
{ ".mht" , "message/rfc822" },
{ ".mid" , "audio/mid" },
{ ".mpv2" , "video/mpeg" },
{ ".man" , "application/x-troff-man" },
{ ".mvb" , "application/x-msmediaview" },
{ ".mpeg" , "video/mpeg" },
{ ".m3u" , "audio/x-mpegurl" },
{ ".mdb" , "application/x-msaccess" },
{ ".mpp" , "application/vnd.ms-project" },
{ ".m1v" , "video/mpeg" },
{ ".mpa" , "video/mpeg" },
{ ".me" , "application/x-troff-me" },
{ ".m13" , "application/x-msmediaview" },
{ ".movie" , "video/x-sgi-movie" },
{ ".m14" , "application/x-msmediaview" },
{ ".mpe" , "video/mpeg" },
{ ".mp2" , "video/mpeg" },
{ ".mov" , "video/quicktime" },
{ ".mp3" , "audio/mpeg" },
{ ".mpg" , "video/mpeg" },
{ ".ms" , "application/x-troff-ms" },
{ ".nc" , "application/x-netcdf" },
{ ".nws" , "message/rfc822" },
{ ".oda" , "application/oda" },
{ ".ods" , "application/oleobject" },
{ ".pmc" , "application/x-perfmon" },
{ ".p7r" , "application/x-pkcs7-certreqresp" },
{ ".p7b" , "application/x-pkcs7-certificates" },
{ ".p7s" , "application/pkcs7-signature" },
{ ".pmw" , "application/x-perfmon" },
{ ".ps" , "application/postscript" },
{ ".p7c" , "application/pkcs7-mime" },
{ ".pbm" , "image/x-portable-bitmap" },
{ ".ppm" , "image/x-portable-pixmap" },
{ ".pub" , "application/x-mspublisher" },
{ ".png" , "image/png" },
{ ".pnm" , "image/x-portable-anymap" },
{ ".pml" , "application/x-perfmon" },
{ ".p10" , "application/pkcs10" },
{ ".pfx" , "application/x-pkcs12" },
{ ".p12" , "application/x-pkcs12" },
{ ".pdf" , "application/pdf" },
{ ".pps" , "application/vnd.ms-powerpoint" },
{ ".p7m" , "application/pkcs7-mime" },
{ ".pko" , "application/vndms-pkipko" },
{ ".ppt" , "application/vnd.ms-powerpoint" },
{ ".pmr" , "application/x-perfmon" },
{ ".pma" , "application/x-perfmon" },
{ ".pot" , "application/vnd.ms-powerpoint" },
{ ".prf" , "application/pics-rules" },
{ ".pgm" , "image/x-portable-graymap" },
{ ".qt" , "video/quicktime" },
{ ".ra" , "audio/x-pn-realaudio" },
{ ".rgb" , "image/x-rgb" },
{ ".ram" , "audio/x-pn-realaudio" },
{ ".rmi" , "audio/mid" },
{ ".ras" , "image/x-cmu-raster" },
{ ".roff" , "application/x-troff" },
{ ".rtf" , "application/rtf" },
{ ".rtx" , "text/richtext" },
{ ".sv4crc" , "application/x-sv4crc" },
{ ".spc" , "application/x-pkcs7-certificates" },
{ ".setreg" , "application/set-registration-initiation" },
{ ".snd" , "audio/basic" },
{ ".stl" , "application/vndms-pkistl" },
{ ".setpay" , "application/set-payment-initiation" },
{ ".stm" , "text/html" },
{ ".shar" , "application/x-shar" },
{ ".sh" , "application/x-sh" },
{ ".sit" , "application/x-stuffit" },
{ ".spl" , "application/futuresplash" },
{ ".sct" , "text/scriptlet" },
{ ".scd" , "application/x-msschedule" },
{ ".sst" , "application/vndms-pkicertstore" },
{ ".src" , "application/x-wais-source" },
{ ".sv4cpio", "application/x-sv4cpio" },
{ ".tex" , "application/x-tex" },
{ ".tgz" , "application/x-compressed" },
{ ".t" , "application/x-troff" },
{ ".tar" , "application/x-tar" },
{ ".tr" , "application/x-troff" },
{ ".tif" , "image/tiff" },
{ ".txt" , "text/plain" },
{ ".texinfo", "application/x-texinfo" },
{ ".trm" , "application/x-msterminal" },
{ ".tiff" , "image/tiff" },
{ ".tcl" , "application/x-tcl" },
{ ".texi" , "application/x-texinfo" },
{ ".tsv" , "text/tab-separated-values" },
{ ".ustar" , "application/x-ustar" },
{ ".uls" , "text/iuls" },
{ ".vcf" , "text/x-vcard" },
{ ".wps" , "application/vnd.ms-works" },
{ ".wav" , "audio/wav" },
{ ".wrz" , "x-world/x-vrml" },
{ ".wri" , "application/x-mswrite" },
{ ".wks" , "application/vnd.ms-works" },
{ ".wmf" , "application/x-msmetafile" },
{ ".wcm" , "application/vnd.ms-works" },
{ ".wrl" , "x-world/x-vrml" },
{ ".wdb" , "application/vnd.ms-works" },
{ ".wsdl" , "text/xml" },
{ ".xml" , "text/xml" },
{ ".xlm" , "application/vnd.ms-excel" },
{ ".xaf" , "x-world/x-vrml" },
{ ".xla" , "application/vnd.ms-excel" },
{ ".xls" , "application/vnd.ms-excel" },
{ ".xof" , "x-world/x-vrml" },
{ ".xlt" , "application/vnd.ms-excel" },
{ ".xlc" , "application/vnd.ms-excel" },
{ ".xsl" , "text/xml" },
{ ".xbm" , "image/x-xbitmap" },
{ ".xlw" , "application/vnd.ms-excel" },
{ ".xpm" , "image/x-xpixmap" },
{ ".xwd" , "image/x-xwindowdump" },
{ ".xsd" , "text/xml" },
{ ".z" , "application/x-compress" },
{ ".zip" , "application/x-zip-compressed" },
{ ".*" , "application/octet-stream" },
// Office 2007 MIME types
// http://www.bram.us/2007/05/25/office-2007-mime-types-for-iis/
{ ".docm" , "application/vnd.ms-word.document.macroEnabled.12" },
{ ".docx" , "application/vnd.openxmlformats-officedocument.wordprocessingml.document" },
{ ".dotm" , "application/vnd.ms-word.template.macroEnabled.12" },
{ ".dotx" , "application/vnd.openxmlformats-officedocument.wordprocessingml.template" },
{ ".potm" , "application/vnd.ms-powerpoint.template.macroEnabled.12" },
{ ".potx" , "application/vnd.openxmlformats-officedocument.presentationml.template" },
{ ".ppam" , "application/vnd.ms-powerpoint.addin.macroEnabled.12" },
{ ".ppsm" , "application/vnd.ms-powerpoint.slideshow.macroEnabled.12" },
{ ".ppsx" , "application/vnd.openxmlformats-officedocument.presentationml.slideshow" },
{ ".pptm" , "application/vnd.ms-powerpoint.presentation.macroEnabled.12" },
{ ".pptx" , "application/vnd.openxmlformats-officedocument.presentationml.presentation" },
{ ".xlam" , "application/vnd.ms-excel.addin.macroEnabled.12" },
{ ".xlsb" , "application/vnd.ms-excel.sheet.binary.macroEnabled.12" },
{ ".xlsm" , "application/vnd.ms-excel.sheet.macroEnabled.12" },
{ ".xlsx" , "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },
{ ".xltm" , "application/vnd.ms-excel.template.macroEnabled.12" },
{ ".xltx" , "application/vnd.openxmlformats-officedocument.spreadsheetml.template" },
};
//
// NOTE! If you add more MIME mappings here, do not forget to
// update the capacity of the hashtable.
//
return map;
}
#endregion
}