Obter o tipo MIME da extensão de nome de arquivo

Como posso obter o tipo MIME de uma extensão de arquivo?

ATUALIZAR

Para mapeamento atualizado com adições de muitos colaboradores, veja este repository GitHub:

https://github.com/samuelneff/MimeTypeMap


Eu encontrei muitos tipos MIME meu aplicativo usa não estão no registro do Windows padrão e outros estão no registro, mas não na lista incluída com o IIS. Eu compilei uma lista desses locais e adicionei alguns outros que usamos.

EDIT: Veja a versão mais atualizada com contribuições aqui , incluindo um mapeamento bidirecional eficiente e determinista.

private static IDictionary _mappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) { #region Big freaking list of mime types // combination of values from Windows 7 Registry and // from C:\Windows\System32\inetsrv\config\applicationHost.config // some added, including .7z and .dat {".323", "text/h323"}, {".3g2", "video/3gpp2"}, {".3gp", "video/3gpp"}, {".3gp2", "video/3gpp2"}, {".3gpp", "video/3gpp"}, {".7z", "application/x-7z-compressed"}, {".aa", "audio/audible"}, {".AAC", "audio/aac"}, {".aaf", "application/octet-stream"}, {".aax", "audio/vnd.audible.aax"}, {".ac3", "audio/ac3"}, {".aca", "application/octet-stream"}, {".accda", "application/msaccess.addin"}, {".accdb", "application/msaccess"}, {".accdc", "application/msaccess.cab"}, {".accde", "application/msaccess"}, {".accdr", "application/msaccess.runtime"}, {".accdt", "application/msaccess"}, {".accdw", "application/msaccess.webapplication"}, {".accft", "application/msaccess.ftemplate"}, {".acx", "application/internet-property-stream"}, {".AddIn", "text/xml"}, {".ade", "application/msaccess"}, {".adobebridge", "application/x-bridge-url"}, {".adp", "application/msaccess"}, {".ADT", "audio/vnd.dlna.adts"}, {".ADTS", "audio/aac"}, {".afm", "application/octet-stream"}, {".ai", "application/postscript"}, {".aif", "audio/x-aiff"}, {".aifc", "audio/aiff"}, {".aiff", "audio/aiff"}, {".air", "application/vnd.adobe.air-application-installer-package+zip"}, {".amc", "application/x-mpeg"}, {".application", "application/x-ms-application"}, {".art", "image/x-jg"}, {".asa", "application/xml"}, {".asax", "application/xml"}, {".ascx", "application/xml"}, {".asd", "application/octet-stream"}, {".asf", "video/x-ms-asf"}, {".ashx", "application/xml"}, {".asi", "application/octet-stream"}, {".asm", "text/plain"}, {".asmx", "application/xml"}, {".aspx", "application/xml"}, {".asr", "video/x-ms-asf"}, {".asx", "video/x-ms-asf"}, {".atom", "application/atom+xml"}, {".au", "audio/basic"}, {".avi", "video/x-msvideo"}, {".axs", "application/olescript"}, {".bas", "text/plain"}, {".bcpio", "application/x-bcpio"}, {".bin", "application/octet-stream"}, {".bmp", "image/bmp"}, {".c", "text/plain"}, {".cab", "application/octet-stream"}, {".caf", "audio/x-caf"}, {".calx", "application/vnd.ms-office.calx"}, {".cat", "application/vnd.ms-pki.seccat"}, {".cc", "text/plain"}, {".cd", "text/plain"}, {".cdda", "audio/aiff"}, {".cdf", "application/x-cdf"}, {".cer", "application/x-x509-ca-cert"}, {".chm", "application/octet-stream"}, {".class", "application/x-java-applet"}, {".clp", "application/x-msclip"}, {".cmx", "image/x-cmx"}, {".cnf", "text/plain"}, {".cod", "image/cis-cod"}, {".config", "application/xml"}, {".contact", "text/x-ms-contact"}, {".coverage", "application/xml"}, {".cpio", "application/x-cpio"}, {".cpp", "text/plain"}, {".crd", "application/x-mscardfile"}, {".crl", "application/pkix-crl"}, {".crt", "application/x-x509-ca-cert"}, {".cs", "text/plain"}, {".csdproj", "text/plain"}, {".csh", "application/x-csh"}, {".csproj", "text/plain"}, {".css", "text/css"}, {".csv", "text/csv"}, {".cur", "application/octet-stream"}, {".cxx", "text/plain"}, {".dat", "application/octet-stream"}, {".datasource", "application/xml"}, {".dbproj", "text/plain"}, {".dcr", "application/x-director"}, {".def", "text/plain"}, {".deploy", "application/octet-stream"}, {".der", "application/x-x509-ca-cert"}, {".dgml", "application/xml"}, {".dib", "image/bmp"}, {".dif", "video/x-dv"}, {".dir", "application/x-director"}, {".disco", "text/xml"}, {".dll", "application/x-msdownload"}, {".dll.config", "text/xml"}, {".dlm", "text/dlm"}, {".doc", "application/msword"}, {".docm", "application/vnd.ms-word.document.macroEnabled.12"}, {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".dot", "application/msword"}, {".dotm", "application/vnd.ms-word.template.macroEnabled.12"}, {".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"}, {".dsp", "application/octet-stream"}, {".dsw", "text/plain"}, {".dtd", "text/xml"}, {".dtsConfig", "text/xml"}, {".dv", "video/x-dv"}, {".dvi", "application/x-dvi"}, {".dwf", "drawing/x-dwf"}, {".dwp", "application/octet-stream"}, {".dxr", "application/x-director"}, {".eml", "message/rfc822"}, {".emz", "application/octet-stream"}, {".eot", "application/octet-stream"}, {".eps", "application/postscript"}, {".etl", "application/etl"}, {".etx", "text/x-setext"}, {".evy", "application/envoy"}, {".exe", "application/octet-stream"}, {".exe.config", "text/xml"}, {".fdf", "application/vnd.fdf"}, {".fif", "application/fractals"}, {".filters", "Application/xml"}, {".fla", "application/octet-stream"}, {".flr", "x-world/x-vrml"}, {".flv", "video/x-flv"}, {".fsscript", "application/fsharp-script"}, {".fsx", "application/fsharp-script"}, {".generictest", "application/xml"}, {".gif", "image/gif"}, {".group", "text/x-ms-group"}, {".gsm", "audio/x-gsm"}, {".gtar", "application/x-gtar"}, {".gz", "application/x-gzip"}, {".h", "text/plain"}, {".hdf", "application/x-hdf"}, {".hdml", "text/x-hdml"}, {".hhc", "application/x-oleobject"}, {".hhk", "application/octet-stream"}, {".hhp", "application/octet-stream"}, {".hlp", "application/winhlp"}, {".hpp", "text/plain"}, {".hqx", "application/mac-binhex40"}, {".hta", "application/hta"}, {".htc", "text/x-component"}, {".htm", "text/html"}, {".html", "text/html"}, {".htt", "text/webviewhtml"}, {".hxa", "application/xml"}, {".hxc", "application/xml"}, {".hxd", "application/octet-stream"}, {".hxe", "application/xml"}, {".hxf", "application/xml"}, {".hxh", "application/octet-stream"}, {".hxi", "application/octet-stream"}, {".hxk", "application/xml"}, {".hxq", "application/octet-stream"}, {".hxr", "application/octet-stream"}, {".hxs", "application/octet-stream"}, {".hxt", "text/html"}, {".hxv", "application/xml"}, {".hxw", "application/octet-stream"}, {".hxx", "text/plain"}, {".i", "text/plain"}, {".ico", "image/x-icon"}, {".ics", "application/octet-stream"}, {".idl", "text/plain"}, {".ief", "image/ief"}, {".iii", "application/x-iphone"}, {".inc", "text/plain"}, {".inf", "application/octet-stream"}, {".inl", "text/plain"}, {".ins", "application/x-internet-signup"}, {".ipa", "application/x-itunes-ipa"}, {".ipg", "application/x-itunes-ipg"}, {".ipproj", "text/plain"}, {".ipsw", "application/x-itunes-ipsw"}, {".iqy", "text/x-ms-iqy"}, {".isp", "application/x-internet-signup"}, {".ite", "application/x-itunes-ite"}, {".itlp", "application/x-itunes-itlp"}, {".itms", "application/x-itunes-itms"}, {".itpc", "application/x-itunes-itpc"}, {".IVF", "video/x-ivf"}, {".jar", "application/java-archive"}, {".java", "application/octet-stream"}, {".jck", "application/liquidmotion"}, {".jcz", "application/liquidmotion"}, {".jfif", "image/pjpeg"}, {".jnlp", "application/x-java-jnlp-file"}, {".jpb", "application/octet-stream"}, {".jpe", "image/jpeg"}, {".jpeg", "image/jpeg"}, {".jpg", "image/jpeg"}, {".js", "application/x-javascript"}, {".json", "application/json"}, {".jsx", "text/jscript"}, {".jsxbin", "text/plain"}, {".latex", "application/x-latex"}, {".library-ms", "application/windows-library+xml"}, {".lit", "application/x-ms-reader"}, {".loadtest", "application/xml"}, {".lpk", "application/octet-stream"}, {".lsf", "video/x-la-asf"}, {".lst", "text/plain"}, {".lsx", "video/x-la-asf"}, {".lzh", "application/octet-stream"}, {".m13", "application/x-msmediaview"}, {".m14", "application/x-msmediaview"}, {".m1v", "video/mpeg"}, {".m2t", "video/vnd.dlna.mpeg-tts"}, {".m2ts", "video/vnd.dlna.mpeg-tts"}, {".m2v", "video/mpeg"}, {".m3u", "audio/x-mpegurl"}, {".m3u8", "audio/x-mpegurl"}, {".m4a", "audio/m4a"}, {".m4b", "audio/m4b"}, {".m4p", "audio/m4p"}, {".m4r", "audio/x-m4r"}, {".m4v", "video/x-m4v"}, {".mac", "image/x-macpaint"}, {".mak", "text/plain"}, {".man", "application/x-troff-man"}, {".manifest", "application/x-ms-manifest"}, {".map", "text/plain"}, {".master", "application/xml"}, {".mda", "application/msaccess"}, {".mdb", "application/x-msaccess"}, {".mde", "application/msaccess"}, {".mdp", "application/octet-stream"}, {".me", "application/x-troff-me"}, {".mfp", "application/x-shockwave-flash"}, {".mht", "message/rfc822"}, {".mhtml", "message/rfc822"}, {".mid", "audio/mid"}, {".midi", "audio/mid"}, {".mix", "application/octet-stream"}, {".mk", "text/plain"}, {".mmf", "application/x-smaf"}, {".mno", "text/xml"}, {".mny", "application/x-msmoney"}, {".mod", "video/mpeg"}, {".mov", "video/quicktime"}, {".movie", "video/x-sgi-movie"}, {".mp2", "video/mpeg"}, {".mp2v", "video/mpeg"}, {".mp3", "audio/mpeg"}, {".mp4", "video/mp4"}, {".mp4v", "video/mp4"}, {".mpa", "video/mpeg"}, {".mpe", "video/mpeg"}, {".mpeg", "video/mpeg"}, {".mpf", "application/vnd.ms-mediapackage"}, {".mpg", "video/mpeg"}, {".mpp", "application/vnd.ms-project"}, {".mpv2", "video/mpeg"}, {".mqv", "video/quicktime"}, {".ms", "application/x-troff-ms"}, {".msi", "application/octet-stream"}, {".mso", "application/octet-stream"}, {".mts", "video/vnd.dlna.mpeg-tts"}, {".mtx", "application/xml"}, {".mvb", "application/x-msmediaview"}, {".mvc", "application/x-miva-compiled"}, {".mxp", "application/x-mmxp"}, {".nc", "application/x-netcdf"}, {".nsc", "video/x-ms-asf"}, {".nws", "message/rfc822"}, {".ocx", "application/octet-stream"}, {".oda", "application/oda"}, {".odc", "text/x-ms-odc"}, {".odh", "text/plain"}, {".odl", "text/plain"}, {".odp", "application/vnd.oasis.opendocument.presentation"}, {".ods", "application/oleobject"}, {".odt", "application/vnd.oasis.opendocument.text"}, {".one", "application/onenote"}, {".onea", "application/onenote"}, {".onepkg", "application/onenote"}, {".onetmp", "application/onenote"}, {".onetoc", "application/onenote"}, {".onetoc2", "application/onenote"}, {".orderedtest", "application/xml"}, {".osdx", "application/opensearchdescription+xml"}, {".p10", "application/pkcs10"}, {".p12", "application/x-pkcs12"}, {".p7b", "application/x-pkcs7-certificates"}, {".p7c", "application/pkcs7-mime"}, {".p7m", "application/pkcs7-mime"}, {".p7r", "application/x-pkcs7-certreqresp"}, {".p7s", "application/pkcs7-signature"}, {".pbm", "image/x-portable-bitmap"}, {".pcast", "application/x-podcast"}, {".pct", "image/pict"}, {".pcx", "application/octet-stream"}, {".pcz", "application/octet-stream"}, {".pdf", "application/pdf"}, {".pfb", "application/octet-stream"}, {".pfm", "application/octet-stream"}, {".pfx", "application/x-pkcs12"}, {".pgm", "image/x-portable-graymap"}, {".pic", "image/pict"}, {".pict", "image/pict"}, {".pkgdef", "text/plain"}, {".pkgundef", "text/plain"}, {".pko", "application/vnd.ms-pki.pko"}, {".pls", "audio/scpls"}, {".pma", "application/x-perfmon"}, {".pmc", "application/x-perfmon"}, {".pml", "application/x-perfmon"}, {".pmr", "application/x-perfmon"}, {".pmw", "application/x-perfmon"}, {".png", "image/png"}, {".pnm", "image/x-portable-anymap"}, {".pnt", "image/x-macpaint"}, {".pntg", "image/x-macpaint"}, {".pnz", "image/png"}, {".pot", "application/vnd.ms-powerpoint"}, {".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"}, {".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"}, {".ppa", "application/vnd.ms-powerpoint"}, {".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"}, {".ppm", "image/x-portable-pixmap"}, {".pps", "application/vnd.ms-powerpoint"}, {".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"}, {".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"}, {".ppt", "application/vnd.ms-powerpoint"}, {".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"}, {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".prf", "application/pics-rules"}, {".prm", "application/octet-stream"}, {".prx", "application/octet-stream"}, {".ps", "application/postscript"}, {".psc1", "application/PowerShell"}, {".psd", "application/octet-stream"}, {".psess", "application/xml"}, {".psm", "application/octet-stream"}, {".psp", "application/octet-stream"}, {".pub", "application/x-mspublisher"}, {".pwz", "application/vnd.ms-powerpoint"}, {".qht", "text/x-html-insertion"}, {".qhtm", "text/x-html-insertion"}, {".qt", "video/quicktime"}, {".qti", "image/x-quicktime"}, {".qtif", "image/x-quicktime"}, {".qtl", "application/x-quicktimeplayer"}, {".qxd", "application/octet-stream"}, {".ra", "audio/x-pn-realaudio"}, {".ram", "audio/x-pn-realaudio"}, {".rar", "application/octet-stream"}, {".ras", "image/x-cmu-raster"}, {".rat", "application/rat-file"}, {".rc", "text/plain"}, {".rc2", "text/plain"}, {".rct", "text/plain"}, {".rdlc", "application/xml"}, {".resx", "application/xml"}, {".rf", "image/vnd.rn-realflash"}, {".rgb", "image/x-rgb"}, {".rgs", "text/plain"}, {".rm", "application/vnd.rn-realmedia"}, {".rmi", "audio/mid"}, {".rmp", "application/vnd.rn-rn_music_package"}, {".roff", "application/x-troff"}, {".rpm", "audio/x-pn-realaudio-plugin"}, {".rqy", "text/x-ms-rqy"}, {".rtf", "application/rtf"}, {".rtx", "text/richtext"}, {".ruleset", "application/xml"}, {".s", "text/plain"}, {".safariextz", "application/x-safari-safariextz"}, {".scd", "application/x-msschedule"}, {".sct", "text/scriptlet"}, {".sd2", "audio/x-sd2"}, {".sdp", "application/sdp"}, {".sea", "application/octet-stream"}, {".searchConnector-ms", "application/windows-search-connector+xml"}, {".setpay", "application/set-payment-initiation"}, {".setreg", "application/set-registration-initiation"}, {".settings", "application/xml"}, {".sgimb", "application/x-sgimb"}, {".sgml", "text/sgml"}, {".sh", "application/x-sh"}, {".shar", "application/x-shar"}, {".shtml", "text/html"}, {".sit", "application/x-stuffit"}, {".sitemap", "application/xml"}, {".skin", "application/xml"}, {".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12"}, {".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"}, {".slk", "application/vnd.ms-excel"}, {".sln", "text/plain"}, {".slupkg-ms", "application/x-ms-license"}, {".smd", "audio/x-smd"}, {".smi", "application/octet-stream"}, {".smx", "audio/x-smd"}, {".smz", "audio/x-smd"}, {".snd", "audio/basic"}, {".snippet", "application/xml"}, {".snp", "application/octet-stream"}, {".sol", "text/plain"}, {".sor", "text/plain"}, {".spc", "application/x-pkcs7-certificates"}, {".spl", "application/futuresplash"}, {".src", "application/x-wais-source"}, {".srf", "text/plain"}, {".SSISDeploymentManifest", "text/xml"}, {".ssm", "application/streamingmedia"}, {".sst", "application/vnd.ms-pki.certstore"}, {".stl", "application/vnd.ms-pki.stl"}, {".sv4cpio", "application/x-sv4cpio"}, {".sv4crc", "application/x-sv4crc"}, {".svc", "application/xml"}, {".swf", "application/x-shockwave-flash"}, {".t", "application/x-troff"}, {".tar", "application/x-tar"}, {".tcl", "application/x-tcl"}, {".testrunconfig", "application/xml"}, {".testsettings", "application/xml"}, {".tex", "application/x-tex"}, {".texi", "application/x-texinfo"}, {".texinfo", "application/x-texinfo"}, {".tgz", "application/x-compressed"}, {".thmx", "application/vnd.ms-officetheme"}, {".thn", "application/octet-stream"}, {".tif", "image/tiff"}, {".tiff", "image/tiff"}, {".tlh", "text/plain"}, {".tli", "text/plain"}, {".toc", "application/octet-stream"}, {".tr", "application/x-troff"}, {".trm", "application/x-msterminal"}, {".trx", "application/xml"}, {".ts", "video/vnd.dlna.mpeg-tts"}, {".tsv", "text/tab-separated-values"}, {".ttf", "application/octet-stream"}, {".tts", "video/vnd.dlna.mpeg-tts"}, {".txt", "text/plain"}, {".u32", "application/octet-stream"}, {".uls", "text/iuls"}, {".user", "text/plain"}, {".ustar", "application/x-ustar"}, {".vb", "text/plain"}, {".vbdproj", "text/plain"}, {".vbk", "video/mpeg"}, {".vbproj", "text/plain"}, {".vbs", "text/vbscript"}, {".vcf", "text/x-vcard"}, {".vcproj", "Application/xml"}, {".vcs", "text/plain"}, {".vcxproj", "Application/xml"}, {".vddproj", "text/plain"}, {".vdp", "text/plain"}, {".vdproj", "text/plain"}, {".vdx", "application/vnd.ms-visio.viewer"}, {".vml", "text/xml"}, {".vscontent", "application/xml"}, {".vsct", "text/xml"}, {".vsd", "application/vnd.visio"}, {".vsi", "application/ms-vsi"}, {".vsix", "application/vsix"}, {".vsixlangpack", "text/xml"}, {".vsixmanifest", "text/xml"}, {".vsmdi", "application/xml"}, {".vspscc", "text/plain"}, {".vss", "application/vnd.visio"}, {".vsscc", "text/plain"}, {".vssettings", "text/xml"}, {".vssscc", "text/plain"}, {".vst", "application/vnd.visio"}, {".vstemplate", "text/xml"}, {".vsto", "application/x-ms-vsto"}, {".vsw", "application/vnd.visio"}, {".vsx", "application/vnd.visio"}, {".vtx", "application/vnd.visio"}, {".wav", "audio/wav"}, {".wave", "audio/wav"}, {".wax", "audio/x-ms-wax"}, {".wbk", "application/msword"}, {".wbmp", "image/vnd.wap.wbmp"}, {".wcm", "application/vnd.ms-works"}, {".wdb", "application/vnd.ms-works"}, {".wdp", "image/vnd.ms-photo"}, {".webarchive", "application/x-safari-webarchive"}, {".webtest", "application/xml"}, {".wiq", "application/xml"}, {".wiz", "application/msword"}, {".wks", "application/vnd.ms-works"}, {".WLMP", "application/wlmoviemaker"}, {".wlpginstall", "application/x-wlpg-detect"}, {".wlpginstall3", "application/x-wlpg3-detect"}, {".wm", "video/x-ms-wm"}, {".wma", "audio/x-ms-wma"}, {".wmd", "application/x-ms-wmd"}, {".wmf", "application/x-msmetafile"}, {".wml", "text/vnd.wap.wml"}, {".wmlc", "application/vnd.wap.wmlc"}, {".wmls", "text/vnd.wap.wmlscript"}, {".wmlsc", "application/vnd.wap.wmlscriptc"}, {".wmp", "video/x-ms-wmp"}, {".wmv", "video/x-ms-wmv"}, {".wmx", "video/x-ms-wmx"}, {".wmz", "application/x-ms-wmz"}, {".wpl", "application/vnd.ms-wpl"}, {".wps", "application/vnd.ms-works"}, {".wri", "application/x-mswrite"}, {".wrl", "x-world/x-vrml"}, {".wrz", "x-world/x-vrml"}, {".wsc", "text/scriptlet"}, {".wsdl", "text/xml"}, {".wvx", "video/x-ms-wvx"}, {".x", "application/directx"}, {".xaf", "x-world/x-vrml"}, {".xaml", "application/xaml+xml"}, {".xap", "application/x-silverlight-app"}, {".xbap", "application/x-ms-xbap"}, {".xbm", "image/x-xbitmap"}, {".xdr", "text/plain"}, {".xht", "application/xhtml+xml"}, {".xhtml", "application/xhtml+xml"}, {".xla", "application/vnd.ms-excel"}, {".xlam", "application/vnd.ms-excel.addin.macroEnabled.12"}, {".xlc", "application/vnd.ms-excel"}, {".xld", "application/vnd.ms-excel"}, {".xlk", "application/vnd.ms-excel"}, {".xll", "application/vnd.ms-excel"}, {".xlm", "application/vnd.ms-excel"}, {".xls", "application/vnd.ms-excel"}, {".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"}, {".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".xlt", "application/vnd.ms-excel"}, {".xltm", "application/vnd.ms-excel.template.macroEnabled.12"}, {".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"}, {".xlw", "application/vnd.ms-excel"}, {".xml", "text/xml"}, {".xmta", "application/xml"}, {".xof", "x-world/x-vrml"}, {".XOML", "text/plain"}, {".xpm", "image/x-xpixmap"}, {".xps", "application/vnd.ms-xpsdocument"}, {".xrm-ms", "text/xml"}, {".xsc", "application/xml"}, {".xsd", "text/xml"}, {".xsf", "text/xml"}, {".xsl", "text/xml"}, {".xslt", "text/xml"}, {".xsn", "application/octet-stream"}, {".xss", "application/xml"}, {".xtp", "application/octet-stream"}, {".xwd", "image/x-xwindowdump"}, {".z", "application/x-compress"}, {".zip", "application/x-zip-compressed"}, #endregion }; public static string GetMimeType(string extension) { if (extension == null) { throw new ArgumentNullException("extension"); } if (!extension.StartsWith(".")) { extension = "." + extension; } string mime; return _mappings.TryGetValue(extension, out mime) ? mime : "application/octet-stream"; } 

Para ASP.NET ou outro

As opções foram alteradas um pouco no ASP.NET Core, aqui estão elas ( créditos ):

  • new FileExtensionContentTypeProvider().TryGetContentType(fileName, out contentType); (somente vNext)
    • Nunca testei, mas parece que você pode expandir oficialmente a lista de tipos mime através da propriedade Mappings exposta.
  • Use o pacote MimeTypes NuGet
  • Copie o arquivo MimeMappings da fonte de referência do .NET Framework

Para o .NET Framework> = 4.5:

Use o método System.Web.MimeMapping.GetMimeMapping , que faz parte do BCL no .NET Framework 4.5:

 string mimeType = MimeMapping.GetMimeMapping(fileName); 

Se você precisar adicionar mapeamentos personalizados, provavelmente poderá usar a reflection para adicionar mapeamentos à class MimeMapping , ele usa um dictionary personalizado que expõe esse método, portanto, você deve invocar o seguinte para adicionar mapeamentos (nunca testados, mas devem funcionar. ).

De qualquer forma, ao usar reflection para adicionar tipos MIME, esteja ciente de que, como você está acessando um campo privado, seu nome pode mudar ou até ser totalmente removido, você deve ser extremamente cauteloso e adicionar verificações duplas e fornecer uma ação à prova de falhas para cada etapa .

 MimeMapping._mappingDictionary.AddMapping(string fileExtension, string mimeType) 

Você pode usar esta function auxiliar:

 private string GetMimeType (string fileName) { string mimeType = "application/unknown"; string ext = System.IO.Path.GetExtension(fileName).ToLower(); Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); if (regKey != null && regKey.GetValue("Content Type") != null) mimeType = regKey.GetValue("Content Type").ToString(); return mimeType; } 

Apenas para tornar a resposta de Shimmy mais clara:

 var mimeType = MimeMapping.GetMimeMapping(fileName); 

System.Web.dll v4.5

 // Summary: // Returns the MIME mapping for the specified file name. // // Parameters: // fileName: // The file name that is used to determine the MIME type. public static string GetMimeMapping(string fileName); 

Você pode encontrar essas informações no registro. Por exemplo, o tipo MIME para o arquivo .pdf pode ser encontrado na chave HKEY_CLASSES_ROOT\.pdf , no valor “Content Type”:

 string mimeType = Registry.GetValue(@"HKEY_CLASSES_ROOT\.pdf", "Content Type", null) as string; 

Eu escrevi um programa para buscar e converter o arquivo apache mime.types em um C # Dictionary codificado por extensão de arquivo. Está aqui .

A saída real é esse arquivo (mas você pode querer pegá-lo e executá-lo novamente caso o arquivo Apache tenha sido atualizado desde a última vez que executei isso).

 public static Dictionary MimeTypes = new Dictionary { { "123", "application/vnd.lotus-1-2-3" }, { "3dml", "text/vnd.in3d.3dml" }, { "3g2", "video/3gpp2" }, { "3gp", "video/3gpp" }, { "7z", "application/x-7z-compressed" }, { "aab", "application/x-authorware-bin" }, { "aac", "audio/x-aac" }, { "aam", "application/x-authorware-map" }, { "aas", "application/x-authorware-seg" }, { "abw", "application/x-abiword" }, ... 

Eu gosto do trabalho que Samuel Neff fez, mas não da ideia e da sobrecarga de criar um dictionary todas as vezes.

Eu reestruturei as coisas como um caso de switch. Sim, você não pode iterar sobre isso, mas no meu caso eu só o uso para procurar rapidamente um valor. Especialmente porque é feito em um serviço da web, a última coisa que quero é um monte de sobrecarga à medida que o aplicativo prepara suas estruturas. O compilador transformará isso em uma pesquisa com hash e, portanto, será muito rápido.

 public static string GetMimeType(string extension) { if (extension == null) throw new ArgumentNullException("extension"); if (extension.StartsWith(".")) extension = extension.Substring(1); switch (extension.ToLower()) { #region Big freaking list of mime types case "323": return "text/h323"; case "3g2": return "video/3gpp2"; case "3gp": return "video/3gpp"; case "3gp2": return "video/3gpp2"; case "3gpp": return "video/3gpp"; case "7z": return "application/x-7z-compressed"; case "aa": return "audio/audible"; case "aac": return "audio/aac"; case "aaf": return "application/octet-stream"; case "aax": return "audio/vnd.audible.aax"; case "ac3": return "audio/ac3"; case "aca": return "application/octet-stream"; case "accda": return "application/msaccess.addin"; case "accdb": return "application/msaccess"; case "accdc": return "application/msaccess.cab"; case "accde": return "application/msaccess"; case "accdr": return "application/msaccess.runtime"; case "accdt": return "application/msaccess"; case "accdw": return "application/msaccess.webapplication"; case "accft": return "application/msaccess.ftemplate"; case "acx": return "application/internet-property-stream"; case "addin": return "text/xml"; case "ade": return "application/msaccess"; case "adobebridge": return "application/x-bridge-url"; case "adp": return "application/msaccess"; case "adt": return "audio/vnd.dlna.adts"; case "adts": return "audio/aac"; case "afm": return "application/octet-stream"; case "ai": return "application/postscript"; case "aif": return "audio/x-aiff"; case "aifc": return "audio/aiff"; case "aiff": return "audio/aiff"; case "air": return "application/vnd.adobe.air-application-installer-package+zip"; case "amc": return "application/x-mpeg"; case "application": return "application/x-ms-application"; case "art": return "image/x-jg"; case "asa": return "application/xml"; case "asax": return "application/xml"; case "ascx": return "application/xml"; case "asd": return "application/octet-stream"; case "asf": return "video/x-ms-asf"; case "ashx": return "application/xml"; case "asi": return "application/octet-stream"; case "asm": return "text/plain"; case "asmx": return "application/xml"; case "aspx": return "application/xml"; case "asr": return "video/x-ms-asf"; case "asx": return "video/x-ms-asf"; case "atom": return "application/atom+xml"; case "au": return "audio/basic"; case "avi": return "video/x-msvideo"; case "axs": return "application/olescript"; case "bas": return "text/plain"; case "bcpio": return "application/x-bcpio"; case "bin": return "application/octet-stream"; case "bmp": return "image/bmp"; case "c": return "text/plain"; case "cab": return "application/octet-stream"; case "caf": return "audio/x-caf"; case "calx": return "application/vnd.ms-office.calx"; case "cat": return "application/vnd.ms-pki.seccat"; case "cc": return "text/plain"; case "cd": return "text/plain"; case "cdda": return "audio/aiff"; case "cdf": return "application/x-cdf"; case "cer": return "application/x-x509-ca-cert"; case "chm": return "application/octet-stream"; case "class": return "application/x-java-applet"; case "clp": return "application/x-msclip"; case "cmx": return "image/x-cmx"; case "cnf": return "text/plain"; case "cod": return "image/cis-cod"; case "config": return "application/xml"; case "contact": return "text/x-ms-contact"; case "coverage": return "application/xml"; case "cpio": return "application/x-cpio"; case "cpp": return "text/plain"; case "crd": return "application/x-mscardfile"; case "crl": return "application/pkix-crl"; case "crt": return "application/x-x509-ca-cert"; case "cs": return "text/plain"; case "csdproj": return "text/plain"; case "csh": return "application/x-csh"; case "csproj": return "text/plain"; case "css": return "text/css"; case "csv": return "text/csv"; case "cur": return "application/octet-stream"; case "cxx": return "text/plain"; case "dat": return "application/octet-stream"; case "datasource": return "application/xml"; case "dbproj": return "text/plain"; case "dcr": return "application/x-director"; case "def": return "text/plain"; case "deploy": return "application/octet-stream"; case "der": return "application/x-x509-ca-cert"; case "dgml": return "application/xml"; case "dib": return "image/bmp"; case "dif": return "video/x-dv"; case "dir": return "application/x-director"; case "disco": return "text/xml"; case "dll": return "application/x-msdownload"; case "dll.config": return "text/xml"; case "dlm": return "text/dlm"; case "doc": return "application/msword"; case "docm": return "application/vnd.ms-word.document.macroenabled.12"; case "docx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; case "dot": return "application/msword"; case "dotm": return "application/vnd.ms-word.template.macroenabled.12"; case "dotx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; case "dsp": return "application/octet-stream"; case "dsw": return "text/plain"; case "dtd": return "text/xml"; case "dtsconfig": return "text/xml"; case "dv": return "video/x-dv"; case "dvi": return "application/x-dvi"; case "dwf": return "drawing/x-dwf"; case "dwp": return "application/octet-stream"; case "dxr": return "application/x-director"; case "eml": return "message/rfc822"; case "emz": return "application/octet-stream"; case "eot": return "application/octet-stream"; case "eps": return "application/postscript"; case "etl": return "application/etl"; case "etx": return "text/x-setext"; case "evy": return "application/envoy"; case "exe": return "application/octet-stream"; case "exe.config": return "text/xml"; case "fdf": return "application/vnd.fdf"; case "fif": return "application/fractals"; case "filters": return "application/xml"; case "fla": return "application/octet-stream"; case "flr": return "x-world/x-vrml"; case "flv": return "video/x-flv"; case "fsscript": return "application/fsharp-script"; case "fsx": return "application/fsharp-script"; case "generictest": return "application/xml"; case "gif": return "image/gif"; case "group": return "text/x-ms-group"; case "gsm": return "audio/x-gsm"; case "gtar": return "application/x-gtar"; case "gz": return "application/x-gzip"; case "h": return "text/plain"; case "hdf": return "application/x-hdf"; case "hdml": return "text/x-hdml"; case "hhc": return "application/x-oleobject"; case "hhk": return "application/octet-stream"; case "hhp": return "application/octet-stream"; case "hlp": return "application/winhlp"; case "hpp": return "text/plain"; case "hqx": return "application/mac-binhex40"; case "hta": return "application/hta"; case "htc": return "text/x-component"; case "htm": return "text/html"; case "html": return "text/html"; case "htt": return "text/webviewhtml"; case "hxa": return "application/xml"; case "hxc": return "application/xml"; case "hxd": return "application/octet-stream"; case "hxe": return "application/xml"; case "hxf": return "application/xml"; case "hxh": return "application/octet-stream"; case "hxi": return "application/octet-stream"; case "hxk": return "application/xml"; case "hxq": return "application/octet-stream"; case "hxr": return "application/octet-stream"; case "hxs": return "application/octet-stream"; case "hxt": return "text/html"; case "hxv": return "application/xml"; case "hxw": return "application/octet-stream"; case "hxx": return "text/plain"; case "i": return "text/plain"; case "ico": return "image/x-icon"; case "ics": return "application/octet-stream"; case "idl": return "text/plain"; case "ief": return "image/ief"; case "iii": return "application/x-iphone"; case "inc": return "text/plain"; case "inf": return "application/octet-stream"; case "inl": return "text/plain"; case "ins": return "application/x-internet-signup"; case "ipa": return "application/x-itunes-ipa"; case "ipg": return "application/x-itunes-ipg"; case "ipproj": return "text/plain"; case "ipsw": return "application/x-itunes-ipsw"; case "iqy": return "text/x-ms-iqy"; case "isp": return "application/x-internet-signup"; case "ite": return "application/x-itunes-ite"; case "itlp": return "application/x-itunes-itlp"; case "itms": return "application/x-itunes-itms"; case "itpc": return "application/x-itunes-itpc"; case "ivf": return "video/x-ivf"; case "jar": return "application/java-archive"; case "java": return "application/octet-stream"; case "jck": return "application/liquidmotion"; case "jcz": return "application/liquidmotion"; case "jfif": return "image/pjpeg"; case "jnlp": return "application/x-java-jnlp-file"; case "jpb": return "application/octet-stream"; case "jpe": return "image/jpeg"; case "jpeg": return "image/jpeg"; case "jpg": return "image/jpeg"; case "js": return "application/x-javascript"; case "jsx": return "text/jscript"; case "jsxbin": return "text/plain"; case "latex": return "application/x-latex"; case "library-ms": return "application/windows-library+xml"; case "lit": return "application/x-ms-reader"; case "loadtest": return "application/xml"; case "lpk": return "application/octet-stream"; case "lsf": return "video/x-la-asf"; case "lst": return "text/plain"; case "lsx": return "video/x-la-asf"; case "lzh": return "application/octet-stream"; case "m13": return "application/x-msmediaview"; case "m14": return "application/x-msmediaview"; case "m1v": return "video/mpeg"; case "m2t": return "video/vnd.dlna.mpeg-tts"; case "m2ts": return "video/vnd.dlna.mpeg-tts"; case "m2v": return "video/mpeg"; case "m3u": return "audio/x-mpegurl"; case "m3u8": return "audio/x-mpegurl"; case "m4a": return "audio/m4a"; case "m4b": return "audio/m4b"; case "m4p": return "audio/m4p"; case "m4r": return "audio/x-m4r"; case "m4v": return "video/x-m4v"; case "mac": return "image/x-macpaint"; case "mak": return "text/plain"; case "man": return "application/x-troff-man"; case "manifest": return "application/x-ms-manifest"; case "map": return "text/plain"; case "master": return "application/xml"; case "mda": return "application/msaccess"; case "mdb": return "application/x-msaccess"; case "mde": return "application/msaccess"; case "mdp": return "application/octet-stream"; case "me": return "application/x-troff-me"; case "mfp": return "application/x-shockwave-flash"; case "mht": return "message/rfc822"; case "mhtml": return "message/rfc822"; case "mid": return "audio/mid"; case "midi": return "audio/mid"; case "mix": return "application/octet-stream"; case "mk": return "text/plain"; case "mmf": return "application/x-smaf"; case "mno": return "text/xml"; case "mny": return "application/x-msmoney"; case "mod": return "video/mpeg"; case "mov": return "video/quicktime"; case "movie": return "video/x-sgi-movie"; case "mp2": return "video/mpeg"; case "mp2v": return "video/mpeg"; case "mp3": return "audio/mpeg"; case "mp4": return "video/mp4"; case "mp4v": return "video/mp4"; case "mpa": return "video/mpeg"; case "mpe": return "video/mpeg"; case "mpeg": return "video/mpeg"; case "mpf": return "application/vnd.ms-mediapackage"; case "mpg": return "video/mpeg"; case "mpp": return "application/vnd.ms-project"; case "mpv2": return "video/mpeg"; case "mqv": return "video/quicktime"; case "ms": return "application/x-troff-ms"; case "msi": return "application/octet-stream"; case "mso": return "application/octet-stream"; case "mts": return "video/vnd.dlna.mpeg-tts"; case "mtx": return "application/xml"; case "mvb": return "application/x-msmediaview"; case "mvc": return "application/x-miva-compiled"; case "mxp": return "application/x-mmxp"; case "nc": return "application/x-netcdf"; case "nsc": return "video/x-ms-asf"; case "nws": return "message/rfc822"; case "ocx": return "application/octet-stream"; case "oda": return "application/oda"; case "odc": return "text/x-ms-odc"; case "odh": return "text/plain"; case "odl": return "text/plain"; case "odp": return "application/vnd.oasis.opendocument.presentation"; case "ods": return "application/oleobject"; case "odt": return "application/vnd.oasis.opendocument.text"; case "one": return "application/onenote"; case "onea": return "application/onenote"; case "onepkg": return "application/onenote"; case "onetmp": return "application/onenote"; case "onetoc": return "application/onenote"; case "onetoc2": return "application/onenote"; case "orderedtest": return "application/xml"; case "osdx": return "application/opensearchdescription+xml"; case "p10": return "application/pkcs10"; case "p12": return "application/x-pkcs12"; case "p7b": return "application/x-pkcs7-certificates"; case "p7c": return "application/pkcs7-mime"; case "p7m": return "application/pkcs7-mime"; case "p7r": return "application/x-pkcs7-certreqresp"; case "p7s": return "application/pkcs7-signature"; case "pbm": return "image/x-portable-bitmap"; case "pcast": return "application/x-podcast"; case "pct": return "image/pict"; case "pcx": return "application/octet-stream"; case "pcz": return "application/octet-stream"; case "pdf": return "application/pdf"; case "pfb": return "application/octet-stream"; case "pfm": return "application/octet-stream"; case "pfx": return "application/x-pkcs12"; case "pgm": return "image/x-portable-graymap"; case "pic": return "image/pict"; case "pict": return "image/pict"; case "pkgdef": return "text/plain"; case "pkgundef": return "text/plain"; case "pko": return "application/vnd.ms-pki.pko"; case "pls": return "audio/scpls"; case "pma": return "application/x-perfmon"; case "pmc": return "application/x-perfmon"; case "pml": return "application/x-perfmon"; case "pmr": return "application/x-perfmon"; case "pmw": return "application/x-perfmon"; case "png": return "image/png"; case "pnm": return "image/x-portable-anymap"; case "pnt": return "image/x-macpaint"; case "pntg": return "image/x-macpaint"; case "pnz": return "image/png"; case "pot": return "application/vnd.ms-powerpoint"; case "potm": return "application/vnd.ms-powerpoint.template.macroenabled.12"; case "potx": return "application/vnd.openxmlformats-officedocument.presentationml.template"; case "ppa": return "application/vnd.ms-powerpoint"; case "ppam": return "application/vnd.ms-powerpoint.addin.macroenabled.12"; case "ppm": return "image/x-portable-pixmap"; case "pps": return "application/vnd.ms-powerpoint"; case "ppsm": return "application/vnd.ms-powerpoint.slideshow.macroenabled.12"; case "ppsx": return "application/vnd.openxmlformats-officedocument.presentationml.slideshow"; case "ppt": return "application/vnd.ms-powerpoint"; case "pptm": return "application/vnd.ms-powerpoint.presentation.macroenabled.12"; case "pptx": return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; case "prf": return "application/pics-rules"; case "prm": return "application/octet-stream"; case "prx": return "application/octet-stream"; case "ps": return "application/postscript"; case "psc1": return "application/powershell"; case "psd": return "application/octet-stream"; case "psess": return "application/xml"; case "psm": return "application/octet-stream"; case "psp": return "application/octet-stream"; case "pub": return "application/x-mspublisher"; case "pwz": return "application/vnd.ms-powerpoint"; case "qht": return "text/x-html-insertion"; case "qhtm": return "text/x-html-insertion"; case "qt": return "video/quicktime"; case "qti": return "image/x-quicktime"; case "qtif": return "image/x-quicktime"; case "qtl": return "application/x-quicktimeplayer"; case "qxd": return "application/octet-stream"; case "ra": return "audio/x-pn-realaudio"; case "ram": return "audio/x-pn-realaudio"; case "rar": return "application/octet-stream"; case "ras": return "image/x-cmu-raster"; case "rat": return "application/rat-file"; case "rc": return "text/plain"; case "rc2": return "text/plain"; case "rct": return "text/plain"; case "rdlc": return "application/xml"; case "resx": return "application/xml"; case "rf": return "image/vnd.rn-realflash"; case "rgb": return "image/x-rgb"; case "rgs": return "text/plain"; case "rm": return "application/vnd.rn-realmedia"; case "rmi": return "audio/mid"; case "rmp": return "application/vnd.rn-rn_music_package"; case "roff": return "application/x-troff"; case "rpm": return "audio/x-pn-realaudio-plugin"; case "rqy": return "text/x-ms-rqy"; case "rtf": return "application/rtf"; case "rtx": return "text/richtext"; case "ruleset": return "application/xml"; case "s": return "text/plain"; case "safariextz": return "application/x-safari-safariextz"; case "scd": return "application/x-msschedule"; case "sct": return "text/scriptlet"; case "sd2": return "audio/x-sd2"; case "sdp": return "application/sdp"; case "sea": return "application/octet-stream"; case "searchconnector-ms": return "application/windows-search-connector+xml"; case "setpay": return "application/set-payment-initiation"; case "setreg": return "application/set-registration-initiation"; case "settings": return "application/xml"; case "sgimb": return "application/x-sgimb"; case "sgml": return "text/sgml"; case "sh": return "application/x-sh"; case "shar": return "application/x-shar"; case "shtml": return "text/html"; case "sit": return "application/x-stuffit"; case "sitemap": return "application/xml"; case "skin": return "application/xml"; case "sldm": return "application/vnd.ms-powerpoint.slide.macroenabled.12"; case "sldx": return "application/vnd.openxmlformats-officedocument.presentationml.slide"; case "slk": return "application/vnd.ms-excel"; case "sln": return "text/plain"; case "slupkg-ms": return "application/x-ms-license"; case "smd": return "audio/x-smd"; case "smi": return "application/octet-stream"; case "smx": return "audio/x-smd"; case "smz": return "audio/x-smd"; case "snd": return "audio/basic"; case "snippet": return "application/xml"; case "snp": return "application/octet-stream"; case "sol": return "text/plain"; case "sor": return "text/plain"; case "spc": return "application/x-pkcs7-certificates"; case "spl": return "application/futuresplash"; case "src": return "application/x-wais-source"; case "srf": return "text/plain"; case "ssisdeploymentmanifest": return "text/xml"; case "ssm": return "application/streamingmedia"; case "sst": return "application/vnd.ms-pki.certstore"; case "stl": return "application/vnd.ms-pki.stl"; case "sv4cpio": return "application/x-sv4cpio"; case "sv4crc": return "application/x-sv4crc"; case "svc": return "application/xml"; case "swf": return "application/x-shockwave-flash"; case "t": return "application/x-troff"; case "tar": return "application/x-tar"; case "tcl": return "application/x-tcl"; case "testrunconfig": return "application/xml"; case "testsettings": return "application/xml"; case "tex": return "application/x-tex"; case "texi": return "application/x-texinfo"; case "texinfo": return "application/x-texinfo"; case "tgz": return "application/x-compressed"; case "thmx": return "application/vnd.ms-officetheme"; case "thn": return "application/octet-stream"; case "tif": return "image/tiff"; case "tiff": return "image/tiff"; case "tlh": return "text/plain"; case "tli": return "text/plain"; case "toc": return "application/octet-stream"; case "tr": return "application/x-troff"; case "trm": return "application/x-msterminal"; case "trx": return "application/xml"; case "ts": return "video/vnd.dlna.mpeg-tts"; case "tsv": return "text/tab-separated-values"; case "ttf": return "application/octet-stream"; case "tts": return "video/vnd.dlna.mpeg-tts"; case "txt": return "text/plain"; case "u32": return "application/octet-stream"; case "uls": return "text/iuls"; case "user": return "text/plain"; case "ustar": return "application/x-ustar"; case "vb": return "text/plain"; case "vbdproj": return "text/plain"; case "vbk": return "video/mpeg"; case "vbproj": return "text/plain"; case "vbs": return "text/vbscript"; case "vcf": return "text/x-vcard"; case "vcproj": return "application/xml"; case "vcs": return "text/plain"; case "vcxproj": return "application/xml"; case "vddproj": return "text/plain"; case "vdp": return "text/plain"; case "vdproj": return "text/plain"; case "vdx": return "application/vnd.ms-visio.viewer"; case "vml": return "text/xml"; case "vscontent": return "application/xml"; case "vsct": return "text/xml"; case "vsd": return "application/vnd.visio"; case "vsi": return "application/ms-vsi"; case "vsix": return "application/vsix"; case "vsixlangpack": return "text/xml"; case "vsixmanifest": return "text/xml"; case "vsmdi": return "application/xml"; case "vspscc": return "text/plain"; case "vss": return "application/vnd.visio"; case "vsscc": return "text/plain"; case "vssettings": return "text/xml"; case "vssscc": return "text/plain"; case "vst": return "application/vnd.visio"; case "vstemplate": return "text/xml"; case "vsto": return "application/x-ms-vsto"; case "vsw": return "application/vnd.visio"; case "vsx": return "application/vnd.visio"; case "vtx": return "application/vnd.visio"; case "wav": return "audio/wav"; case "wave": return "audio/wav"; case "wax": return "audio/x-ms-wax"; case "wbk": return "application/msword"; case "wbmp": return "image/vnd.wap.wbmp"; case "wcm": return "application/vnd.ms-works"; case "wdb": return "application/vnd.ms-works"; case "wdp": return "image/vnd.ms-photo"; case "webarchive": return "application/x-safari-webarchive"; case "webtest": return "application/xml"; case "wiq": return "application/xml"; case "wiz": return "application/msword"; case "wks": return "application/vnd.ms-works"; case "wlmp": return "application/wlmoviemaker"; case "wlpginstall": return "application/x-wlpg-detect"; case "wlpginstall3": return "application/x-wlpg3-detect"; case "wm": return "video/x-ms-wm"; case "wma": return "audio/x-ms-wma"; case "wmd": return "application/x-ms-wmd"; case "wmf": return "application/x-msmetafile"; case "wml": return "text/vnd.wap.wml"; case "wmlc": return "application/vnd.wap.wmlc"; case "wmls": return "text/vnd.wap.wmlscript"; case "wmlsc": return "application/vnd.wap.wmlscriptc"; case "wmp": return "video/x-ms-wmp"; case "wmv": return "video/x-ms-wmv"; case "wmx": return "video/x-ms-wmx"; case "wmz": return "application/x-ms-wmz"; case "wpl": return "application/vnd.ms-wpl"; case "wps": return "application/vnd.ms-works"; case "wri": return "application/x-mswrite"; case "wrl": return "x-world/x-vrml"; case "wrz": return "x-world/x-vrml"; case "wsc": return "text/scriptlet"; case "wsdl": return "text/xml"; case "wvx": return "video/x-ms-wvx"; case "x": return "application/directx"; case "xaf": return "x-world/x-vrml"; case "xaml": return "application/xaml+xml"; case "xap": return "application/x-silverlight-app"; case "xbap": return "application/x-ms-xbap"; case "xbm": return "image/x-xbitmap"; case "xdr": return "text/plain"; case "xht": return "application/xhtml+xml"; case "xhtml": return "application/xhtml+xml"; case "xla": return "application/vnd.ms-excel"; case "xlam": return "application/vnd.ms-excel.addin.macroenabled.12"; case "xlc": return "application/vnd.ms-excel"; case "xld": return "application/vnd.ms-excel"; case "xlk": return "application/vnd.ms-excel"; case "xll": return "application/vnd.ms-excel"; case "xlm": return "application/vnd.ms-excel"; case "xls": return "application/vnd.ms-excel"; case "xlsb": return "application/vnd.ms-excel.sheet.binary.macroenabled.12"; case "xlsm": return "application/vnd.ms-excel.sheet.macroenabled.12"; case "xlsx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; case "xlt": return "application/vnd.ms-excel"; case "xltm": return "application/vnd.ms-excel.template.macroenabled.12"; case "xltx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; case "xlw": return "application/vnd.ms-excel"; case "xml": return "text/xml"; case "xmta": return "application/xml"; case "xof": return "x-world/x-vrml"; case "xoml": return "text/plain"; case "xpm": return "image/x-xpixmap"; case "xps": return "application/vnd.ms-xpsdocument"; case "xrm-ms": return "text/xml"; case "xsc": return "application/xml"; case "xsd": return "text/xml"; case "xsf": return "text/xml"; case "xsl": return "text/xml"; case "xslt": return "text/xml"; case "xsn": return "application/octet-stream"; case "xss": return "application/xml"; case "xtp": return "application/octet-stream"; case "xwd": return "image/x-xwindowdump"; case "z": return "application/x-compress"; case "zip": return "application/x-zip-compressed"; #endregion default: return "application/octet-stream"; } } 

a combination of both solutions presented here:

 using System; using System.Collections.Generic; namespace Mime { class Mime { public static string GetMimeType(string fileName) { if (string.IsNullOrEmpty(fileName) || string.IsNullOrWhiteSpace(fileName)) { throw new ArgumentNullException("filename must contain a filename"); } string extension = System.IO.Path.GetExtension(fileName).ToLower(); if (!extension.StartsWith(".")) { extension = "." + extension; } string mime; if (_mappings.TryGetValue(extension, out mime)) return mime; if (GetWindowsMimeType(extension, out mime)) { _mappings.Add(extension, mime); return mime; } return "application/octet-stream"; } public static bool GetWindowsMimeType(string ext, out string mime) { mime="application/octet-stream"; Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); if (regKey != null) { object val=regKey.GetValue("Content Type") ; if (val != null) { string strval = val.ToString(); if(!(string.IsNullOrEmpty(strval)||string.IsNullOrWhiteSpace(strval))) { mime=strval; return true; } } } return false; } static IDictionary _mappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) { #region Big freaking list of mime types // combination of values from Windows 7 Registry and // from C:\Windows\System32\inetsrv\config\applicationHost.config // some added, including .7z and .dat {".323", "text/h323"}, {".3g2", "video/3gpp2"}, {".3gp", "video/3gpp"}, {".3gp2", "video/3gpp2"}, {".3gpp", "video/3gpp"}, {".7z", "application/x-7z-compressed"}, {".aa", "audio/audible"}, {".AAC", "audio/aac"}, {".aaf", "application/octet-stream"}, {".aax", "audio/vnd.audible.aax"}, {".ac3", "audio/ac3"}, {".aca", "application/octet-stream"}, {".accda", "application/msaccess.addin"}, {".accdb", "application/msaccess"}, {".accdc", "application/msaccess.cab"}, {".accde", "application/msaccess"}, {".accdr", "application/msaccess.runtime"}, {".accdt", "application/msaccess"}, {".accdw", "application/msaccess.webapplication"}, {".accft", "application/msaccess.ftemplate"}, {".acx", "application/internet-property-stream"}, {".AddIn", "text/xml"}, {".ade", "application/msaccess"}, {".adobebridge", "application/x-bridge-url"}, {".adp", "application/msaccess"}, {".ADT", "audio/vnd.dlna.adts"}, {".ADTS", "audio/aac"}, {".afm", "application/octet-stream"}, {".ai", "application/postscript"}, {".aif", "audio/x-aiff"}, {".aifc", "audio/aiff"}, {".aiff", "audio/aiff"}, {".air", "application/vnd.adobe.air-application-installer-package+zip"}, {".amc", "application/x-mpeg"}, {".application", "application/x-ms-application"}, {".art", "image/x-jg"}, {".asa", "application/xml"}, {".asax", "application/xml"}, {".ascx", "application/xml"}, {".asd", "application/octet-stream"}, {".asf", "video/x-ms-asf"}, {".ashx", "application/xml"}, {".asi", "application/octet-stream"}, {".asm", "text/plain"}, {".asmx", "application/xml"}, {".aspx", "application/xml"}, {".asr", "video/x-ms-asf"}, {".asx", "video/x-ms-asf"}, {".atom", "application/atom+xml"}, {".au", "audio/basic"}, {".avi", "video/x-msvideo"}, {".axs", "application/olescript"}, {".bas", "text/plain"}, {".bcpio", "application/x-bcpio"}, {".bin", "application/octet-stream"}, {".bmp", "image/bmp"}, {".c", "text/plain"}, {".cab", "application/octet-stream"}, {".caf", "audio/x-caf"}, {".calx", "application/vnd.ms-office.calx"}, {".cat", "application/vnd.ms-pki.seccat"}, {".cc", "text/plain"}, {".cd", "text/plain"}, {".cdda", "audio/aiff"}, {".cdf", "application/x-cdf"}, {".cer", "application/x-x509-ca-cert"}, {".chm", "application/octet-stream"}, {".class", "application/x-java-applet"}, {".clp", "application/x-msclip"}, {".cmx", "image/x-cmx"}, {".cnf", "text/plain"}, {".cod", "image/cis-cod"}, {".config", "application/xml"}, {".contact", "text/x-ms-contact"}, {".coverage", "application/xml"}, {".cpio", "application/x-cpio"}, {".cpp", "text/plain"}, {".crd", "application/x-mscardfile"}, {".crl", "application/pkix-crl"}, {".crt", "application/x-x509-ca-cert"}, {".cs", "text/plain"}, {".csdproj", "text/plain"}, {".csh", "application/x-csh"}, {".csproj", "text/plain"}, {".css", "text/css"}, {".csv", "text/csv"}, {".cur", "application/octet-stream"}, {".cxx", "text/plain"}, {".dat", "application/octet-stream"}, {".datasource", "application/xml"}, {".dbproj", "text/plain"}, {".dcr", "application/x-director"}, {".def", "text/plain"}, {".deploy", "application/octet-stream"}, {".der", "application/x-x509-ca-cert"}, {".dgml", "application/xml"}, {".dib", "image/bmp"}, {".dif", "video/x-dv"}, {".dir", "application/x-director"}, {".disco", "text/xml"}, {".dll", "application/x-msdownload"}, {".dll.config", "text/xml"}, {".dlm", "text/dlm"}, {".doc", "application/msword"}, {".docm", "application/vnd.ms-word.document.macroEnabled.12"}, {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".dot", "application/msword"}, {".dotm", "application/vnd.ms-word.template.macroEnabled.12"}, {".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"}, {".dsp", "application/octet-stream"}, {".dsw", "text/plain"}, {".dtd", "text/xml"}, {".dtsConfig", "text/xml"}, {".dv", "video/x-dv"}, {".dvi", "application/x-dvi"}, {".dwf", "drawing/x-dwf"}, {".dwp", "application/octet-stream"}, {".dxr", "application/x-director"}, {".eml", "message/rfc822"}, {".emz", "application/octet-stream"}, {".eot", "application/octet-stream"}, {".eps", "application/postscript"}, {".etl", "application/etl"}, {".etx", "text/x-setext"}, {".evy", "application/envoy"}, {".exe", "application/octet-stream"}, {".exe.config", "text/xml"}, {".fdf", "application/vnd.fdf"}, {".fif", "application/fractals"}, {".filters", "Application/xml"}, {".fla", "application/octet-stream"}, {".flr", "x-world/x-vrml"}, {".flv", "video/x-flv"}, {".fsscript", "application/fsharp-script"}, {".fsx", "application/fsharp-script"}, {".generictest", "application/xml"}, {".gif", "image/gif"}, {".group", "text/x-ms-group"}, {".gsm", "audio/x-gsm"}, {".gtar", "application/x-gtar"}, {".gz", "application/x-gzip"}, {".h", "text/plain"}, {".hdf", "application/x-hdf"}, {".hdml", "text/x-hdml"}, {".hhc", "application/x-oleobject"}, {".hhk", "application/octet-stream"}, {".hhp", "application/octet-stream"}, {".hlp", "application/winhlp"}, {".hpp", "text/plain"}, {".hqx", "application/mac-binhex40"}, {".hta", "application/hta"}, {".htc", "text/x-component"}, {".htm", "text/html"}, {".html", "text/html"}, {".htt", "text/webviewhtml"}, {".hxa", "application/xml"}, {".hxc", "application/xml"}, {".hxd", "application/octet-stream"}, {".hxe", "application/xml"}, {".hxf", "application/xml"}, {".hxh", "application/octet-stream"}, {".hxi", "application/octet-stream"}, {".hxk", "application/xml"}, {".hxq", "application/octet-stream"}, {".hxr", "application/octet-stream"}, {".hxs", "application/octet-stream"}, {".hxt", "text/html"}, {".hxv", "application/xml"}, {".hxw", "application/octet-stream"}, {".hxx", "text/plain"}, {".i", "text/plain"}, {".ico", "image/x-icon"}, {".ics", "application/octet-stream"}, {".idl", "text/plain"}, {".ief", "image/ief"}, {".iii", "application/x-iphone"}, {".inc", "text/plain"}, {".inf", "application/octet-stream"}, {".inl", "text/plain"}, {".ins", "application/x-internet-signup"}, {".ipa", "application/x-itunes-ipa"}, {".ipg", "application/x-itunes-ipg"}, {".ipproj", "text/plain"}, {".ipsw", "application/x-itunes-ipsw"}, {".iqy", "text/x-ms-iqy"}, {".isp", "application/x-internet-signup"}, {".ite", "application/x-itunes-ite"}, {".itlp", "application/x-itunes-itlp"}, {".itms", "application/x-itunes-itms"}, {".itpc", "application/x-itunes-itpc"}, {".IVF", "video/x-ivf"}, {".jar", "application/java-archive"}, {".java", "application/octet-stream"}, {".jck", "application/liquidmotion"}, {".jcz", "application/liquidmotion"}, {".jfif", "image/pjpeg"}, {".jnlp", "application/x-java-jnlp-file"}, {".jpb", "application/octet-stream"}, {".jpe", "image/jpeg"}, {".jpeg", "image/jpeg"}, {".jpg", "image/jpeg"}, {".js", "application/x-javascript"}, {".jsx", "text/jscript"}, {".jsxbin", "text/plain"}, {".latex", "application/x-latex"}, {".library-ms", "application/windows-library+xml"}, {".lit", "application/x-ms-reader"}, {".loadtest", "application/xml"}, {".lpk", "application/octet-stream"}, {".lsf", "video/x-la-asf"}, {".lst", "text/plain"}, {".lsx", "video/x-la-asf"}, {".lzh", "application/octet-stream"}, {".m13", "application/x-msmediaview"}, {".m14", "application/x-msmediaview"}, {".m1v", "video/mpeg"}, {".m2t", "video/vnd.dlna.mpeg-tts"}, {".m2ts", "video/vnd.dlna.mpeg-tts"}, {".m2v", "video/mpeg"}, {".m3u", "audio/x-mpegurl"}, {".m3u8", "audio/x-mpegurl"}, {".m4a", "audio/m4a"}, {".m4b", "audio/m4b"}, {".m4p", "audio/m4p"}, {".m4r", "audio/x-m4r"}, {".m4v", "video/x-m4v"}, {".mac", "image/x-macpaint"}, {".mak", "text/plain"}, {".man", "application/x-troff-man"}, {".manifest", "application/x-ms-manifest"}, {".map", "text/plain"}, {".master", "application/xml"}, {".mda", "application/msaccess"}, {".mdb", "application/x-msaccess"}, {".mde", "application/msaccess"}, {".mdp", "application/octet-stream"}, {".me", "application/x-troff-me"}, {".mfp", "application/x-shockwave-flash"}, {".mht", "message/rfc822"}, {".mhtml", "message/rfc822"}, {".mid", "audio/mid"}, {".midi", "audio/mid"}, {".mix", "application/octet-stream"}, {".mk", "text/plain"}, {".mmf", "application/x-smaf"}, {".mno", "text/xml"}, {".mny", "application/x-msmoney"}, {".mod", "video/mpeg"}, {".mov", "video/quicktime"}, {".movie", "video/x-sgi-movie"}, {".mp2", "video/mpeg"}, {".mp2v", "video/mpeg"}, {".mp3", "audio/mpeg"}, {".mp4", "video/mp4"}, {".mp4v", "video/mp4"}, {".mpa", "video/mpeg"}, {".mpe", "video/mpeg"}, {".mpeg", "video/mpeg"}, {".mpf", "application/vnd.ms-mediapackage"}, {".mpg", "video/mpeg"}, {".mpp", "application/vnd.ms-project"}, {".mpv2", "video/mpeg"}, {".mqv", "video/quicktime"}, {".ms", "application/x-troff-ms"}, {".msi", "application/octet-stream"}, {".mso", "application/octet-stream"}, {".mts", "video/vnd.dlna.mpeg-tts"}, {".mtx", "application/xml"}, {".mvb", "application/x-msmediaview"}, {".mvc", "application/x-miva-compiled"}, {".mxp", "application/x-mmxp"}, {".nc", "application/x-netcdf"}, {".nsc", "video/x-ms-asf"}, {".nws", "message/rfc822"}, {".ocx", "application/octet-stream"}, {".oda", "application/oda"}, {".odc", "text/x-ms-odc"}, {".odh", "text/plain"}, {".odl", "text/plain"}, {".odp", "application/vnd.oasis.opendocument.presentation"}, {".ods", "application/oleobject"}, {".odt", "application/vnd.oasis.opendocument.text"}, {".one", "application/onenote"}, {".onea", "application/onenote"}, {".onepkg", "application/onenote"}, {".onetmp", "application/onenote"}, {".onetoc", "application/onenote"}, {".onetoc2", "application/onenote"}, {".orderedtest", "application/xml"}, {".osdx", "application/opensearchdescription+xml"}, {".p10", "application/pkcs10"}, {".p12", "application/x-pkcs12"}, {".p7b", "application/x-pkcs7-certificates"}, {".p7c", "application/pkcs7-mime"}, {".p7m", "application/pkcs7-mime"}, {".p7r", "application/x-pkcs7-certreqresp"}, {".p7s", "application/pkcs7-signature"}, {".pbm", "image/x-portable-bitmap"}, {".pcast", "application/x-podcast"}, {".pct", "image/pict"}, {".pcx", "application/octet-stream"}, {".pcz", "application/octet-stream"}, {".pdf", "application/pdf"}, {".pfb", "application/octet-stream"}, {".pfm", "application/octet-stream"}, {".pfx", "application/x-pkcs12"}, {".pgm", "image/x-portable-graymap"}, {".pic", "image/pict"}, {".pict", "image/pict"}, {".pkgdef", "text/plain"}, {".pkgundef", "text/plain"}, {".pko", "application/vnd.ms-pki.pko"}, {".pls", "audio/scpls"}, {".pma", "application/x-perfmon"}, {".pmc", "application/x-perfmon"}, {".pml", "application/x-perfmon"}, {".pmr", "application/x-perfmon"}, {".pmw", "application/x-perfmon"}, {".png", "image/png"}, {".pnm", "image/x-portable-anymap"}, {".pnt", "image/x-macpaint"}, {".pntg", "image/x-macpaint"}, {".pnz", "image/png"}, {".pot", "application/vnd.ms-powerpoint"}, {".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"}, {".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"}, {".ppa", "application/vnd.ms-powerpoint"}, {".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"}, {".ppm", "image/x-portable-pixmap"}, {".pps", "application/vnd.ms-powerpoint"}, {".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"}, {".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"}, {".ppt", "application/vnd.ms-powerpoint"}, {".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"}, {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".prf", "application/pics-rules"}, {".prm", "application/octet-stream"}, {".prx", "application/octet-stream"}, {".ps", "application/postscript"}, {".psc1", "application/PowerShell"}, {".psd", "application/octet-stream"}, {".psess", "application/xml"}, {".psm", "application/octet-stream"}, {".psp", "application/octet-stream"}, {".pub", "application/x-mspublisher"}, {".pwz", "application/vnd.ms-powerpoint"}, {".qht", "text/x-html-insertion"}, {".qhtm", "text/x-html-insertion"}, {".qt", "video/quicktime"}, {".qti", "image/x-quicktime"}, {".qtif", "image/x-quicktime"}, {".qtl", "application/x-quicktimeplayer"}, {".qxd", "application/octet-stream"}, {".ra", "audio/x-pn-realaudio"}, {".ram", "audio/x-pn-realaudio"}, {".rar", "application/octet-stream"}, {".ras", "image/x-cmu-raster"}, {".rat", "application/rat-file"}, {".rc", "text/plain"}, {".rc2", "text/plain"}, {".rct", "text/plain"}, {".rdlc", "application/xml"}, {".resx", "application/xml"}, {".rf", "image/vnd.rn-realflash"}, {".rgb", "image/x-rgb"}, {".rgs", "text/plain"}, {".rm", "application/vnd.rn-realmedia"}, {".rmi", "audio/mid"}, {".rmp", "application/vnd.rn-rn_music_package"}, {".roff", "application/x-troff"}, {".rpm", "audio/x-pn-realaudio-plugin"}, {".rqy", "text/x-ms-rqy"}, {".rtf", "application/rtf"}, {".rtx", "text/richtext"}, {".ruleset", "application/xml"}, {".s", "text/plain"}, {".safariextz", "application/x-safari-safariextz"}, {".scd", "application/x-msschedule"}, {".sct", "text/scriptlet"}, {".sd2", "audio/x-sd2"}, {".sdp", "application/sdp"}, {".sea", "application/octet-stream"}, {".searchConnector-ms", "application/windows-search-connector+xml"}, {".setpay", "application/set-payment-initiation"}, {".setreg", "application/set-registration-initiation"}, {".settings", "application/xml"}, {".sgimb", "application/x-sgimb"}, {".sgml", "text/sgml"}, {".sh", "application/x-sh"}, {".shar", "application/x-shar"}, {".shtml", "text/html"}, {".sit", "application/x-stuffit"}, {".sitemap", "application/xml"}, {".skin", "application/xml"}, {".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12"}, {".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"}, {".slk", "application/vnd.ms-excel"}, {".sln", "text/plain"}, {".slupkg-ms", "application/x-ms-license"}, {".smd", "audio/x-smd"}, {".smi", "application/octet-stream"}, {".smx", "audio/x-smd"}, {".smz", "audio/x-smd"}, {".snd", "audio/basic"}, {".snippet", "application/xml"}, {".snp", "application/octet-stream"}, {".sol", "text/plain"}, {".sor", "text/plain"}, {".spc", "application/x-pkcs7-certificates"}, {".spl", "application/futuresplash"}, {".src", "application/x-wais-source"}, {".srf", "text/plain"}, {".SSISDeploymentManifest", "text/xml"}, {".ssm", "application/streamingmedia"}, {".sst", "application/vnd.ms-pki.certstore"}, {".stl", "application/vnd.ms-pki.stl"}, {".sv4cpio", "application/x-sv4cpio"}, {".sv4crc", "application/x-sv4crc"}, {".svc", "application/xml"}, {".swf", "application/x-shockwave-flash"}, {".t", "application/x-troff"}, {".tar", "application/x-tar"}, {".tcl", "application/x-tcl"}, {".testrunconfig", "application/xml"}, {".testsettings", "application/xml"}, {".tex", "application/x-tex"}, {".texi", "application/x-texinfo"}, {".texinfo", "application/x-texinfo"}, {".tgz", "application/x-compressed"}, {".thmx", "application/vnd.ms-officetheme"}, {".thn", "application/octet-stream"}, {".tif", "image/tiff"}, {".tiff", "image/tiff"}, {".tlh", "text/plain"}, {".tli", "text/plain"}, {".toc", "application/octet-stream"}, {".tr", "application/x-troff"}, {".trm", "application/x-msterminal"}, {".trx", "application/xml"}, {".ts", "video/vnd.dlna.mpeg-tts"}, {".tsv", "text/tab-separated-values"}, {".ttf", "application/octet-stream"}, {".tts", "video/vnd.dlna.mpeg-tts"}, {".txt", "text/plain"}, {".u32", "application/octet-stream"}, {".uls", "text/iuls"}, {".user", "text/plain"}, {".ustar", "application/x-ustar"}, {".vb", "text/plain"}, {".vbdproj", "text/plain"}, {".vbk", "video/mpeg"}, {".vbproj", "text/plain"}, {".vbs", "text/vbscript"}, {".vcf", "text/x-vcard"}, {".vcproj", "Application/xml"}, {".vcs", "text/plain"}, {".vcxproj", "Application/xml"}, {".vddproj", "text/plain"}, {".vdp", "text/plain"}, {".vdproj", "text/plain"}, {".vdx", "application/vnd.ms-visio.viewer"}, {".vml", "text/xml"}, {".vscontent", "application/xml"}, {".vsct", "text/xml"}, {".vsd", "application/vnd.visio"}, {".vsi", "application/ms-vsi"}, {".vsix", "application/vsix"}, {".vsixlangpack", "text/xml"}, {".vsixmanifest", "text/xml"}, {".vsmdi", "application/xml"}, {".vspscc", "text/plain"}, {".vss", "application/vnd.visio"}, {".vsscc", "text/plain"}, {".vssettings", "text/xml"}, {".vssscc", "text/plain"}, {".vst", "application/vnd.visio"}, {".vstemplate", "text/xml"}, {".vsto", "application/x-ms-vsto"}, {".vsw", "application/vnd.visio"}, {".vsx", "application/vnd.visio"}, {".vtx", "application/vnd.visio"}, {".wav", "audio/wav"}, {".wave", "audio/wav"}, {".wax", "audio/x-ms-wax"}, {".wbk", "application/msword"}, {".wbmp", "image/vnd.wap.wbmp"}, {".wcm", "application/vnd.ms-works"}, {".wdb", "application/vnd.ms-works"}, {".wdp", "image/vnd.ms-photo"}, {".webarchive", "application/x-safari-webarchive"}, {".webtest", "application/xml"}, {".wiq", "application/xml"}, {".wiz", "application/msword"}, {".wks", "application/vnd.ms-works"}, {".WLMP", "application/wlmoviemaker"}, {".wlpginstall", "application/x-wlpg-detect"}, {".wlpginstall3", "application/x-wlpg3-detect"}, {".wm", "video/x-ms-wm"}, {".wma", "audio/x-ms-wma"}, {".wmd", "application/x-ms-wmd"}, {".wmf", "application/x-msmetafile"}, {".wml", "text/vnd.wap.wml"}, {".wmlc", "application/vnd.wap.wmlc"}, {".wmls", "text/vnd.wap.wmlscript"}, {".wmlsc", "application/vnd.wap.wmlscriptc"}, {".wmp", "video/x-ms-wmp"}, {".wmv", "video/x-ms-wmv"}, {".wmx", "video/x-ms-wmx"}, {".wmz", "application/x-ms-wmz"}, {".wpl", "application/vnd.ms-wpl"}, {".wps", "application/vnd.ms-works"}, {".wri", "application/x-mswrite"}, {".wrl", "x-world/x-vrml"}, {".wrz", "x-world/x-vrml"}, {".wsc", "text/scriptlet"}, {".wsdl", "text/xml"}, {".wvx", "video/x-ms-wvx"}, {".x", "application/directx"}, {".xaf", "x-world/x-vrml"}, {".xaml", "application/xaml+xml"}, {".xap", "application/x-silverlight-app"}, {".xbap", "application/x-ms-xbap"}, {".xbm", "image/x-xbitmap"}, {".xdr", "text/plain"}, {".xht", "application/xhtml+xml"}, {".xhtml", "application/xhtml+xml"}, {".xla", "application/vnd.ms-excel"}, {".xlam", "application/vnd.ms-excel.addin.macroEnabled.12"}, {".xlc", "application/vnd.ms-excel"}, {".xld", "application/vnd.ms-excel"}, {".xlk", "application/vnd.ms-excel"}, {".xll", "application/vnd.ms-excel"}, {".xlm", "application/vnd.ms-excel"}, {".xls", "application/vnd.ms-excel"}, {".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"}, {".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".xlt", "application/vnd.ms-excel"}, {".xltm", "application/vnd.ms-excel.template.macroEnabled.12"}, {".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"}, {".xlw", "application/vnd.ms-excel"}, {".xml", "text/xml"}, {".xmta", "application/xml"}, {".xof", "x-world/x-vrml"}, {".XOML", "text/plain"}, {".xpm", "image/x-xpixmap"}, {".xps", "application/vnd.ms-xpsdocument"}, {".xrm-ms", "text/xml"}, {".xsc", "application/xml"}, {".xsd", "text/xml"}, {".xsf", "text/xml"}, {".xsl", "text/xml"}, {".xslt", "text/xml"}, {".xsn", "application/octet-stream"}, {".xss", "application/xml"}, {".xtp", "application/octet-stream"}, {".xwd", "image/x-xwindowdump"}, {".z", "application/x-compress"}, {".zip", "application/x-zip-compressed"}, #endregion }; } } 

Inspired by Samuel’s answer, I wrote an improved version:

  • Also works when extension is uppercase.
  • Take filename as input, handle files without extensions gracefully.
  • Don’t include “.” in keys.
  • List from Apache , for which I wrote a small transformation script .

The resulting source code is over 30K characters so I can’t post it here, check it on Github .

You could use the table provided from Apache ‘s httpd. It should be trivial to map this into a function, dictionary, list, etc.

Also, as seen here , extension->mime type is not necessarily a function. There may be multiple common MIME types per file extension, so you should look at the requirements of your application, and see why you care about MIME types, what you want “to do” with them, etc. Can you use file extensions to key the same behavior? Do you need to read the first few bytes of a file to determine its MIME type as well?

To make the post more comprehensive, for .NET Core devs there is FileExtensionContentTypeProvider class, which covers the official MIME content types .

It works behind the scene – sets ContentType in the Http Response headers based on the filename extension.

In case you need special MIME types, see example on customising the MIME types :

 public void Configure(IApplicationBuilder app) { // Set up custom content types -associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot", "images")), RequestPath = new PathString("/MyImages"), ContentTypeProvider = provider }); app.UseDirectoryBrowser(new DirectoryBrowserOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot", "images")), RequestPath = new PathString("/MyImages") }); } 

Most of the solutions are working but why take so efforts while we also can get mime type very easily. In System.Web assembly, there is method for getting the mime type from file name. por exemplo:

 string mimeType = MimeMapping.GetMimeMapping(filename); 

If you do not want to add additional dependencies and still want version-independent requests, you can mix this answer on how to get the MIME-Type in different .NET versions with this answer on conditional builds for multiple .NET Framework versions .

First thing I did was editing my project file. After the last build definition, I added the property group as stated in the second answer:

  $(DefineConstants);$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", "")) $(DefineConstants.Remove($(DefineConstants.LastIndexOf(";NET"))));$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))  

Now I provided a different implementations for the MimeExtensionHelper from the first answer, with an additional one for all clients from .NET 4.5 or later simply calling System.Web.MimeMapping.GetMimeMapping :

 #if (NET10 || NET11 || NET20 || NET30 || NET35) public static class MimeExtensionHelper { static object locker = new object(); static MethodInfo getMimeMappingMethodInfo; static MimeExtensionHelper() { Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping"); if (mimeMappingType == null) throw new SystemException("Couldnt find MimeMapping type"); ConstructorInfo constructorInfo = mimeMappingType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null); if (constructorInfo == null) throw new SystemException("Couldnt find default constructor for MimeMapping"); mimeMapping = constructorInfo.Invoke(null); if (mimeMapping == null) throw new SystemException("Couldnt find MimeMapping"); getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic); if (getMimeMappingMethodInfo == null) throw new SystemException("Couldnt find GetMimeMapping method"); if (getMimeMappingMethodInfo.ReturnType != typeof(string)) throw new SystemException("GetMimeMapping method has invalid return type"); if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string)) throw new SystemException("GetMimeMapping method has invalid parameters"); } public static string GetMimeType(string fileName) { lock (locker) { return (string)getMimeMappingMethodInfo.Invoke(null, new object[] { fileName }); } } } #elif NET40 public static class MimeExtensionHelper { static object locker = new object(); static MethodInfo getMimeMappingMethodInfo; static MimeExtensionHelper() { Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping"); if (mimeMappingType == null) throw new SystemException("Couldnt find MimeMapping type"); getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); if (getMimeMappingMethodInfo == null) throw new SystemException("Couldnt find GetMimeMapping method"); if (getMimeMappingMethodInfo.ReturnType != typeof(string)) throw new SystemException("GetMimeMapping method has invalid return type"); if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string)) throw new SystemException("GetMimeMapping method has invalid parameters"); } public static string GetMimeType(string fileName) { lock (locker) { return (string)getMimeMappingMethodInfo.Invoke(null, new object[] { fileName }); } } } #else // .NET 4.5 or later public static class MimeExtensionHelper { public static string GetMimeType(string fileName) { return MimeMapping.GetMimeMapping(fileName); } } #endif 

Also in the versions prior to .NET 4.5, the static MimeMapping class hosts an static instance called _mappingDictionary (of type MimeMapping.MimeMappingDictionaryBase ) which you can request from Reflection in order to add new MIME-Types that may not yet be supported.

It is always not necessary that the mime type calculated by the extention of the file will be always right.

lets say i can save a file with .png extention but the fileformat i can set as “ImageFormat.jpeg”.

So in this case the file which you will be calculating, will give a different result… it may result in big size file than the original.

If you are working with images then you can use the imagecodecInfo and ImageFormat.

Bryan Denny’s post above is not working for me since not all extensions have a “Content Type” sub-key in the registry. I had to tweak the code as follows:

 private string GetMimeType(string sFileName) { // Get file extension and if it is empty, return unknown string sExt = Path.GetExtension(sFileName); if (string.IsNullOrEmpty(sExt)) return "Unknown file type"; // Default type is "EXT File" string mimeType = string.Format("{0} File", sExt.ToUpper().Replace(".", "")); // Open the registry key for the extension under HKEY_CLASSES_ROOT and return default if it doesn't exist Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(sExt); if (regKey == null) return mimeType; // Get the "(Default)" value and re-open the key for that value string sSubType = regKey.GetValue("").ToString(); regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(sSubType); // If it exists, get the "(Default)" value of the new key if (regKey?.GetValue("") != null) mimeType = regKey.GetValue("").ToString(); // Return the value return mimeType; } 

Now it works fine for me for all registered file types and un-registered or generic file types (like JPG, etc).

I have compiled a list of reputable sources for mime type and content type values that are keyed solely on file extension (currently).

The nuget package is here https://www.nuget.org/packages/FTTLib.dll/

and source is here https://github.com/brondavies/filetypetranslator/

This library is designed to have:

  • Nenhuma dependência externa
  • No file system access
  • Small memory footprint
  • Simple static methods (no extension methods and no instantiatable classs)
  • Case-insensitive
  • Portable – works in applications targeting any CLR (.NET 2.0+)

This helper class returns mime type (content type), description and icons for any file name:

 using Microsoft.Win32; using System; using System.Drawing; using System.IO; using System.Runtime.InteropServices; public static class Helper { [DllImport("shell32.dll", CharSet = CharSet.Auto)] private static extern int ExtractIconEx(string lpszFile, int nIconIndex, IntPtr[] phIconLarge, IntPtr[] phIconSmall, int nIcons); [DllImport("user32.dll", SetLastError = true)] private static extern int DestroyIcon(IntPtr hIcon); public static string GetFileContentType(string fileName) { if (fileName == null) { throw new ArgumentNullException("fileName"); } RegistryKey registryKey = null; try { FileInfo fileInfo = new FileInfo(fileName); if (string.IsNullOrEmpty(fileInfo.Extension)) { return string.Empty; } string extension = fileInfo.Extension.ToLowerInvariant(); registryKey = Registry.ClassesRoot.OpenSubKey(extension); if (registryKey == null) { return string.Empty; } object contentTypeObject = registryKey.GetValue("Content Type"); if (!(contentTypeObject is string)) { return string.Empty; } string contentType = (string)contentTypeObject; return contentType; } catch (Exception) { return null; } finally { if (registryKey != null) { registryKey.Close(); } } } public static string GetFileDescription(string fileName) { if (fileName == null) { throw new ArgumentNullException("fileName"); } RegistryKey registryKey1 = null; RegistryKey registryKey2 = null; try { FileInfo fileInfo = new FileInfo(fileName); if (string.IsNullOrEmpty(fileInfo.Extension)) { return string.Empty; } string extension = fileInfo.Extension.ToLowerInvariant(); registryKey1 = Registry.ClassesRoot.OpenSubKey(extension); if (registryKey1 == null) { return string.Empty; } object extensionDefaultObject = registryKey1.GetValue(null); if (!(extensionDefaultObject is string)) { return string.Empty; } string extensionDefaultValue = (string)extensionDefaultObject; registryKey2 = Registry.ClassesRoot.OpenSubKey(extensionDefaultValue); if (registryKey2 == null) { return string.Empty; } object fileDescriptionObject = registryKey2.GetValue(null); if (!(fileDescriptionObject is string)) { return string.Empty; } string fileDescription = (string)fileDescriptionObject; return fileDescription; } catch (Exception) { return null; } finally { if (registryKey2 != null) { registryKey2.Close(); } if (registryKey1 != null) { registryKey1.Close(); } } } public static void GetFileIcons(string fileName, out Icon smallIcon, out Icon largeIcon) { if (fileName == null) { throw new ArgumentNullException("fileName"); } smallIcon = null; largeIcon = null; RegistryKey registryKey1 = null; RegistryKey registryKey2 = null; try { FileInfo fileInfo = new FileInfo(fileName); if (string.IsNullOrEmpty(fileInfo.Extension)) { return; } string extension = fileInfo.Extension.ToLowerInvariant(); registryKey1 = Registry.ClassesRoot.OpenSubKey(extension); if (registryKey1 == null) { return; } object extensionDefaultObject = registryKey1.GetValue(null); if (!(extensionDefaultObject is string)) { return; } string defaultIconKeyName = string.Format("{0}\\DefaultIcon", extensionDefaultObject); registryKey2 = Registry.ClassesRoot.OpenSubKey(defaultIconKeyName); if (registryKey2 == null) { return; } object defaultIconPathObject = registryKey2.GetValue(null); if (!(defaultIconPathObject is string)) { return; } string defaultIconPath = (string)defaultIconPathObject; if (string.IsNullOrWhiteSpace(defaultIconPath)) { return; } string iconfileName = null; int iconIndex = 0; int commaIndex = defaultIconPath.IndexOf(","); if (commaIndex > 0) { iconfileName = defaultIconPath.Substring(0, commaIndex); string iconIndexString = defaultIconPath.Substring(commaIndex + 1); if (!int.TryParse(iconIndexString, out iconIndex)) { iconIndex = 0; } } else { iconfileName = defaultIconPath; iconIndex = 0; } IntPtr[] phiconSmall = new IntPtr[1] { IntPtr.Zero }; IntPtr[] phiconLarge = new IntPtr[1] { IntPtr.Zero }; int readIconCount = ExtractIconEx(iconfileName, iconIndex, phiconLarge, phiconSmall, 1); if (readIconCount < 0) { return; } if (phiconSmall[0] != IntPtr.Zero) { smallIcon = (Icon)Icon.FromHandle(phiconSmall[0]).Clone(); DestroyIcon(phiconSmall[0]); } if (phiconLarge[0] != IntPtr.Zero) { largeIcon = (Icon)Icon.FromHandle(phiconLarge[0]).Clone(); DestroyIcon(phiconLarge[0]); } return; } finally { if (registryKey2 != null) { registryKey2.Close(); } if (registryKey1 != null) { registryKey1.Close(); } } } } 

Uso :

 string fileName = "NotExists.txt"; string contentType = Helper.GetFileContentType(fileName); // "text/plain" string description = Helper.GetFileDescription(fileName); // "Text Document" Icon smallIcon, largeIcon; Helper.GetFileIcons(fileName, out smallIcon, out largeIcon); // 16x16, 32x32 icons 

FileExtension handle the file extension and not the Mime. The user can change the file extension, so check the Mime. The codes examples associate Mime by file extension, this is wrong and does not work.

Need to get the contenttype file and check if the table Mime contetType this file according to the file extension. Now, how to get the ContentType of the file?

Using FileUpload is thus: FileUpload.PostedFile.ContentType; Now if I already have the file, as caught your ContentType?