Получить MIME-тип из расширения файла

Как я могу получить тип MIME из расширения файла?

ОБНОВИТЬ

Для современного сопоставления с дополнениями от многих участников см. Этот repository GitHub:

https://github.com/samuelneff/MimeTypeMap


Я нашел много типов mime, которые используют мои приложения в реестре Windows по умолчанию, а другие – в реестре, но не в списке, включенном в IIS. Я собрал список из этих мест и добавил несколько других, которые мы используем.

РЕДАКТИРОВАТЬ: см. Самую актуальную версию с внесенными здесь вкладами, включая эффективное и детерминированное двухстороннее сопоставление.

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"; } 

Для ASP.NET или других

Варианты были немного изменены в ASP.NET Core, вот они ( кредиты ):

  • new FileExtensionContentTypeProvider().TryGetContentType(fileName, out contentType); (только vNext)
    • Никогда не тестировалось, но похоже, что вы можете официально расширять список типов mime через открытое свойство Mappings .
  • Используйте пакет MimeTypes NuGet
  • Скопируйте файл MimeMappings из исходного источника .NET Framework

Для .NET Framework> = 4.5:

Используйте метод System.Web.MimeMapping.GetMimeMapping , который является частью BCL в .NET Framework 4.5:

 string mimeType = MimeMapping.GetMimeMapping(fileName); 

Если вам нужно добавить настраиваемые сопоставления, возможно, вы можете использовать reflection для добавления сопоставлений в class MimeMapping , он использует пользовательский словарь, который предоставляет этот метод, поэтому вы должны вызывать следующее, чтобы добавить сопоставления (никогда не тестировалось, но должно было работать. ).

Во всяком случае, при использовании отражения для добавления типов MIME, имейте в виду, что, поскольку вы обращаетесь к закрытому полю, его имя может измениться или даже полностью удалено, поэтому вы должны быть осторожны и добавить двойные проверки и обеспечить безотказное действие для каждого шага ,

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

Вы можете использовать эту вспомогательную функцию:

 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; } 

Просто чтобы сделать ответ Шимми более ясным:

 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); 

Вы можете найти эту информацию в реестре. Например, тип MIME для .pdf-файла можно найти в ключе HKEY_CLASSES_ROOT\.pdf в значении «Тип содержимого»:

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

Я написал программу для извлечения и преобразования файла apache mime.types в Dictionary C # Dictionary с расширением файла. Это здесь .

Фактическим результатом является этот файл (но вы можете захотеть его захватить и запустить его снова, если файл Apache был обновлен, так как я в последний раз его запускал).

 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" }, ... 

Мне нравится работа, которую сделал Сэмюэл Нефф, но не идея и накладные расходы на создание словаря каждый раз.

Я реорганизовал вещи как случай переключения. Да, вы не можете перебирать его, но в моем случае я использую его только для быстрого поиска ценности. Тем более, что это делается в веб-службе, последнее, что я хочу, это куча накладных расходов, поскольку приложение готовит свои структуры. Компилятор превратит это в хешированный поиск, и поэтому он будет очень быстрым.

 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. например:

 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:

  • Нет внешних зависимостей
  • No file system access
  • Малый объем памяти
  • Simple static methods (no extension methods and no instantiatable classes)
  • 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(); } } } } 

Использование :

 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?

  • java-библиотеку, чтобы найти тип mime из содержимого файла
  • Давайте будем гением компьютера.