Get MIME type from filename extension
Asked Answered
C

30

484

How can I get the MIME type from a file extension?

Cortex answered 22/6, 2009 at 22:36 Comment(3)
I think that the best would be http://msdn.microsoft.com/en-us/library/system.web.mimemapping.aspxPander
@Yuki, thanks for adding new relevant info. Unfortunately the MS implementation, which is available in .NET 4.5, only has 195 mappings, has no way to add more, and is not configurable. My listing below has 560+ mappings. Oddly, the MS listing is missing extremely common MS extensions even, like .docx and .xlsx and other important web extensions like .csv, .swf, and .air.Venial
TIP: Use Binary Analysis to detect the REAL file format and establish mime-types and dont rely on file extensions.Compte
P
562

For ASP.NET or other

The options were changed a bit in ASP.NET Core, here they are (credits):

  • new FileExtensionContentTypeProvider().TryGetContentType(fileName, out contentType); (vNext only)
    • Never tested, but looks like you can officially expand the mime types list via the exposed Mappings property.
  • Use the MimeTypes NuGet package
  • Copy the MimeMappings file from the reference source of the .NET Framework

For .NET Framework >= 4.5:

Use the System.Web.MimeMapping.GetMimeMapping method, that is part of the BCL in .NET Framework 4.5:

string mimeType = MimeMapping.GetMimeMapping(fileName);

If you need to add custom mappings you probably can use reflection to add mappings to the BCL MimeMapping class, it uses a custom dictionary that exposes this method, so you should invoke the following to add mappings (never tested tho, but should prob. work).

Anyway, when using reflection to add MIME types, be aware that since you're accessing a private field, its name might change or even be totally removed, so you should be extra cautious and add double checks and provide fail safe action for every step.

MimeMapping._mappingDictionary.AddMapping(string fileExtension, string mimeType)
Polad answered 1/1, 2013 at 5:29 Comment(15)
+1 for adding new relevant info. Unfortunately the MS implementation, which is available in .NET 4.5, only has 195 mappings, has no way to add more, and is not configurable. My listing above has 560 mappings. Oddly, the MS listing is missing extremely common MS extensions even, like .docx and .xlsx and other important web extensions like .csv, .swf, and .air.Venial
@SamuelNeff You can of course add mappings using reflection (MimeMapping._mappingDictionary.AddMapping(string fileExtension, string mimeType)).Polad
it's not a great idea to use reflection on private fields. They're more likely to change in the future since it's not an agreed upon contract and you'll get a runtime error instead of a compile-time error if that happens. If you are going to do this, you should at least add unit tests for it to be sure to catch it early when upgrading .NET versions. Besides that, if you're going to add mappings manually, you might as well maintain your own collection. The class is nothing more than a wrapper on a dictionary.Venial
Wrap everything with ifs to make sure variable and methods exists.Polad
sure, that will prevent errors, but if the variables and methods don't exist, your code to add custom mappings won't work. You just won't get errors anymore. We can disagree and argue, bottom line is you're right you can technically call it through reflection, but personally I would never recommend using reflection on private properties in a production application unless it was absolutely necessary and without proper safeguards to catch it early if it fails.Venial
@SamuelNeff definitely. What I do in these cases is either I implement my own retrieving distinct stuff from the system or throw an exception if environment changes using a test method or so or a processor directive that checks for BCL version (I don't believe they'll rename the variable name in a version).Polad
You can add mimetypes using the web.config, I've updated the answer to reflect this.Mcgehee
FWIW, System.Web has been removed from ASP.NET CORE (asp.net 5), meaning no more MimeMapping.Plumbery
new FileExtensionContentTypeProvider().TryGetContentType(fileName, out contentType); that's a really ugly piece of code from MS.Chilli
This API is useless to me: System.Web.MimeMapping.GetMimeMapping(".aac") returns application/octet-stream instead of audio/aac.Abarca
If you are using >= 4.5 make sure you Add Reference to System.Web. then you should be good to go to use that solution! :)Magenmagena
perhaps update your answer and mention FileExtensionContentTypeProvider in .net core and .net 5.0 and laterWitherspoon
@DavidChing, same here, this dictionary is rubbish! .csv also returns application/octet-stream instead of text/csvDaredevil
Thanks for mentioning MimeTypes. Really cool package.Statistics
@AradAlvand That lib only checks extensions, it does not actually retrieve the actual content type of your files. Renaming an executable to .png means it's now an image to the lib. And unfortunately this utility only checks the extension as well, not the magic numbers....Mcvey
V
496

UPDATE

For up-to-date mapping with additions from many contributors, see this GitHub repository:

https://github.com/samuelneff/MimeTypeMap

and NuGet package

https://www.nuget.org/packages/MimeTypeMapOfficial/


I've found many mime types my application uses are not in the default Windows registry and others are in the registry but not in the list included with IIS. I've compiled a list from these locations and added a few others that we use.

EDIT: See most up-do-date version with contributions here, including an efficient and deterministic two-way mapping.

private static IDictionary<string, string> _mappings = new Dictionary<string, string>(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";
}
Venial answered 3/8, 2010 at 4:10 Comment(17)
Somehow I have a feeling that building an associative data structure from a data file at startup would be a bit saner.Cardona
Hey pplz MSFT has now implemented it! Check thisPolad
@Shimmy, interesting. Unfortunately the MS implementation, which is available in .NET 4.5, only has 195 mappings, has no way to add more, and is not configurable. My listing above has 560 mappings. Oddly, the MS listing is missing extremely common MS extensions even, like .docx and .xlsx and other important web extensions like .csv, .swf, and .air.Venial
@JonPurdy, I finally got around to refactoring it to use a dictionary.Venial
terrified of breaking it so I've not updated it but the initial declaration of the dictionary should be static as well (wouldn't compile for me otherwise). Yes, I did just lift this code :)Emasculate
I'd had marked this as a solution long time ago. Thanks, and you are right, strange MS list is not close to complete and missing its own software family.... weird.Mellie
I like your work but decided to re-implement as a switch because I wanted to avoid the run-time overhead and did not need to iterate. Reposed as an alternate answer.Sou
@AnthonyVO, funny, I originally had it as a switch. Actually when you create a switch on strings, it has more overhead than a dictionary. Decompile the code. What it actually does is it creates a dictionary of pointers and then looks up the pointer in the dictionary to jump to that location. Dictionary therefore actually has less overhead.Venial
To check whether your requested mime type is available in the System.Web.MimeMapping class, see the online source reference: referencesource.microsoft.com/#System.Web/xsp/system/Web/….Cairo
@SamuelNeff Have you considered putting this in a github repo so people can send PRs for additional file types?Repurchase
@DamianHickey, good idea. This post long predates my personal GitHub so I hadn't thought to do it earlier. It's posted now. See github.com/samuelneff/MimeTypeMapVenial
@SamuelNeff please add .asc for ASCII files. Thanks :)Brownedoff
@Chrotenise do you have an exact mime type and a reference? .asc is used for a few different types. Where did you run into .asc files and need for a mime type? I'm asking because internet searches turned up little, mostly .asc related to ActionScript Communication files, not ASCII files.Venial
@SamuelNeff need to send ASCII files to a customer by mail. I eventually found that it uses MimeType "text/plain" somewhere else on SO, but your answer is by far easier to find.Brownedoff
Thanks @SamuelNeff for posting the Dictionary type for file MIME types!! this saved the day for me for a project that is not using .NET Framework 4.5, but an earlier version.Berti
Missing SVG vectors: {".svg", "image/svg+xml"}Kcal
@Kcal there are a lot more types in the GitHub repository created from this answer: github.com/samuelneff/MimeTypeMapVenial
S
61

You can use this helper function:

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;
}
Subotica answered 23/11, 2010 at 18:50 Comment(5)
keep in mind that the machine you're running this code on will only "know" about some types - e.g. PDF won't be listed if the machine has never had a PDF reader installed.Fable
Yes, this is bit dangerous since it comes from registry and can miss extensions from software not installed, example .xlsx if only had old versions of Office, will have only .xlsMellie
In addition, this would be a very expensive call to perform a registry lookup every time you need a mime type. Perhaps if it was cached, but I would still prefer the static dictionary method written by Samuel.Crimple
...Or if you're using Mono, you don't really have a Windows registry at your disposal... :)Tanker
@dadwithkids I'm not sure why a registry lookup would be "slow" .. registry access is quite optimized (and must faster than the HTTP context itself). Just monitor registry access at some point to see how many operations/second it is asked to handle each second.Lycanthrope
T
42

Just to make Shimmy's answer more clear:

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);
Teleplay answered 13/6, 2014 at 8:20 Comment(1)
var mimetype = System.Web.MimeMapping.GetMimeMapping(filenamewithext);Veranda
B
24

.NET Core way to get MimeType:

Add Dependency

Microsoft.AspNetCore.StaticFiles

private string GetMimeType(string fileName)
{
    var provider = new FileExtensionContentTypeProvider();
    if (!provider.TryGetContentType(fileName, out var contentType))
    {
        contentType = "application/octet-stream";
    }
    return contentType;            
}
Brat answered 25/2, 2022 at 12:20 Comment(2)
Microsoft.AspNetCore.StaticFiles package has been deprecated as it is legacy and is no longer maintained. -- from Nuget site.Insolvable
The package has been deprecated as a separate nuget, but has been incorporated into Microsoft.AspNetCore.App. Adding a framework reference solves this for non AspNet projects, as described here: https://mcmap.net/q/81012/-fileextensioncontenttypeprovider-in-net-6Fernandofernas
S
23

I like the work that Samuel Neff did, but not the idea and overhead of creating a dictionary every time.

I restructured things as a switch case. Yes you can't iterate over it but in my case I only ever use it to quickly look up a value. Especially because it is done in a web service, the last thing I want is a bunch of overhead as the application prepares its structures. The compiler will turn this into a hashed lookup and so it will be very fast.

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";
  }
}
Sou answered 26/11, 2013 at 15:9 Comment(6)
does anyone have the inverse of this function? set extension by mime type? just being lazy :PIdun
@Idun I'm not sure that's going to be all that useful to you. For example, the MIME type "application/xml" would have 43 matching extensions from this list.Imparity
@Imparity Could you do something like : simply use the first in the list, to get a standard extension (a stab at lowest common denominator) e.g. "application/xml" => .xml and "image/jpeg" =>.jpg which would work on most OSs no? what am I missing? Guessing this would be good for some standard types but fail for plenty in this v long list. thoughts?Morph
Overhead can be avoided simply by making it a static. A switch-case with strings, however, is a horrible, horrible thing when it comes to 'overhead'. Simply speaking... on processor level, everything is just checks and jumps; if/else, while, for... none of that actually exist. switch/case, however, applied to small integer values typically found in enums, does exist. It is a magnificently elegant little operation. It also doesn't work on strings, at all, meaning what you wrote is really just a bunch of string compares. A Dictionary object beats that any day.Blandishment
@Nyerguds, I don't believe your assertion is correct. See: https://mcmap.net/q/35670/-is-there-any-significant-difference-between-using-if-else-and-switch-case-in-c, also see Jon Skeet's comment on the answer. Basically, compilers are smarter then you think.Sou
Interesting. So the above would simply be turned into a dictionary lookup, internally. Thanks for the info; that's some peculiar compiler optimisation trickery.Blandishment
F
18

I've written a program to fetch and convert the Apache mime.types file to a C# Dictionary<string, string> keyed by file extension. It's here.

The actual output is this file (but you might want to grab it and run it again in case the Apache file has been updated since I last ran this).

public static Dictionary<string, string> MimeTypes = new Dictionary<string, string>
{
  { "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" },
  ...
Felizio answered 14/9, 2011 at 17:15 Comment(3)
Oh, that is pretty! I might make something similar the other way around; to generate a class with a Dictionary<String,String[]> of each mime type with all its extensions. It's useful for checking downloads against the submitted content type and adding a default extension where needed.Blandishment
@Blandishment That sounds useful. If you want to do a PR to add it to the above, I'd be happy to merge it. Or you can do your own thing of course! But both directions does sound useful.Felizio
The main problem seems to be the 'default' part... which of the many, many extensions for some of these mime types is the ideal default. I'l probably have to hardcode a list of those anywayBlandishment
H
17

You can find that information in the registry. For instance, the MIME type for .pdf file can be found in the key HKEY_CLASSES_ROOT\.pdf, in the value "Content Type" :

string mimeType = Registry.GetValue(@"HKEY_CLASSES_ROOT\.pdf", "Content Type", null) as string;
Hydrometallurgy answered 22/6, 2009 at 22:51 Comment(6)
If you're on Windows, yes. The basic idea is "find where this information is given," and import that into a data structure of some sort.Jerkin
The OP is related to ASP.NET... OK, ASP.NET can be run on Linux thanks to Mono, but that's not a very common scenario, so I think it's quite safe to assume that acidzombie24 is using Windows...Hydrometallurgy
I would assume Windows is a given when talking about ASP.NET and NOT specifying the use of Linux.Furnary
Hmm, .csv mime type is "application/vnd.ms-excel" on my machine, I wonder do you need some sort of universal MIME type? Or will it be specific only to the one server it is run on. Check a CSV on server A, could be a different MIME type than on server B. It will be important to remember this is not a 1-to-1 scenario.Jerkin
Be careful with this solution, as the result depends on the software the client has installed. i.e. without Office, .doc doesn't have any Content Type.Gramicidin
Yes, Mark's right. Seems I need Adobe Acrobat installed for .PDF to lookup mimetype (tried on Windows Server 2008 R2). So, seems the program associated with the extension maintains this mimetype (not windows).Sensual
D
12

I know the question is for C# I just want to left in Javascript format because i just converted the Samuel's answer:

export const contentTypes = {

".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"
}
Diathermy answered 8/2, 2019 at 0:16 Comment(0)
T
11

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<string, string> _mappings = new Dictionary<string, string>(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

        };

    }
}
Tinsel answered 22/6, 2009 at 22:36 Comment(1)
Upon registry success, cache it in the dictionaryShere
I
8

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")
    });
}
Ideologist answered 23/10, 2017 at 1:13 Comment(1)
thanks for letting us know this. Just a tip for you: to get the root folder of your Web app you should use _hostingEnvironment.WebRootPath - see hereAlarm
G
7

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. eg:

string mimeType = MimeMapping.GetMimeMapping(filename);
Gooey answered 28/7, 2016 at 6:29 Comment(1)
The same answer was given 3 years ago, on this very page. https://mcmap.net/q/79830/-get-mime-type-from-filename-extensionHomeward
R
5

.Net framework provides built-in method to get mime type. No need to write custom code.

string mimeType = System.Web.MimeMapping.GetMimeMapping(fileName);

Rota answered 17/2, 2022 at 20:18 Comment(0)
V
3

Use MimeTypeMap package, which provides a huge two-way mapping of file extensions to mime types and mime types to file extensions

using MimeTypes;

Getting the mime type to an extension

Console.WriteLine("txt -> " + MimeTypeMap.GetMimeType("txt"));  // "text/plain"

Getting the extension to a mime type

Console.WriteLine("audio/wav -> " + MimeTypeMap.GetExtension("audio/wav")); // ".wav"

GitHub Url: https://github.com/samuelneff/MimeTypeMap

Vireo answered 15/12, 2019 at 18:3 Comment(0)
C
2

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.

Cornel answered 11/7, 2013 at 7:35 Comment(0)
R
2

** Use MediaTypeNames Class-->sample : MediaTypeNames.Application.Pdf ** enter image description here

Roman answered 24/10, 2018 at 7:7 Comment(1)
While MediaTypeNames can be handy if you don't want magic strings when returning something from Web API using HttpResponseMessage, it's actually inverse of what is asked by OP.Runkle
D
2

My take at those mimetypes, using the apache list, the below script will give you a dictionary with all the mimetypes.

var mimeTypeListUrl = "http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types";
var webClient = new WebClient();
var rawData = webClient.DownloadString(mimeTypeListUrl).Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);

var extensionToMimeType = new Dictionary<string, string>();
var mimeTypeToExtension = new Dictionary<string, string[]>();

foreach (var row in rawData)
{
    if (row.StartsWith("#")) continue;

    var rowData = row.Split(new[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
    if (rowData.Length != 2) continue;

    var extensions = rowData[1].Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
    if (!mimeTypeToExtension.ContainsKey(rowData[0]))
    {
        mimeTypeToExtension.Add(rowData[0], extensions);
    }

    foreach (var extension in extensions)
    {
        if (!extensionToMimeType.ContainsKey(extension))
        {
            extensionToMimeType.Add(extension, rowData[0]);
        }
    }

}
Dashed answered 17/9, 2019 at 1:4 Comment(0)
S
2

You should not trust the file extension coming from client. Always check the file's magic number.

Using FileTpeInterrogator with ASP.NET Core:

public static class FileTypeChecker
{
    private static List<string> validVideoMimeTypes = new List<string> { "video/mp4", "video/quicktime" };
    private static List<string> validImageMimeTypes = new List<string> { "image/png", "image/jpeg" };

    public static bool IsValidVideo(IFormFile file)
    {
        return validVideoMimeTypes.Contains(GetFileMimeType(file));
    }

    public static bool IsValidImage(IFormFile file)
    {
        return validImageMimeTypes.Contains(GetFileMimeType(file));
    }

    private static string GetFileMimeType(IFormFile file)
    {
        // You should have checked for null and file length before reaching here

        IFileTypeInterrogator interrogator = new FileTypeInterrogator.FileTypeInterrogator();

        byte[] fileBytes;
        using (var stream = new MemoryStream())
        {
            file.CopyTo(stream);
            fileBytes = stream.ToArray();
        }

        FileTypeInfo fileTypeInfo = interrogator.DetectType(fileBytes);
        return fileTypeInfo.MimeType.ToLower();
    }
}

Inside your controller or service:

public IActionResult UploadVideo([FromForm] UploadVideoVM model)
{
    if (model.File.Length < minimumLength || model.File.Length > maximumLength)
    {
        // BadRequest => Size
    }
    else if (!FileTypeChecker.IsValidVideo(model.File))
    {
        // BadRequest => Type
    }
    else
    {
        // All good
    }

    return Ok();
}

To get MIME type of a file extension refer to this file.

Swagsman answered 24/8, 2020 at 9:38 Comment(1)
There is a Vulnerability issue related to this nuget: nvd.nist.gov/vuln/detail/CVE-2014-8117, any alternative?Arctic
J
1

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?

Jerkin answered 22/6, 2009 at 22:52 Comment(0)
A
1

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

Usage:

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
Archibald answered 30/10, 2016 at 16:9 Comment(1)
Unfortunately, this does not work cross-platform and could easily cause troubles in the cloud since it uses RegistryKeysClump
M
1

I did some updates to the scripts. Just in case anyone needs it

function getMime(){
let ext = fileUpload.value.split('.')[1];
let myOutput = getMimeType(ext);
mimeType.value=myOutput;
}


function getMimeType(ext) {

    if (!ext.startsWith(".")) {
        ext = "." + ext;
    }
    let myList =
        [
            {"key": ".323", "value": "text/h323"},
            {"key": ".3g2", "value": "video/3gpp2"},
            {"key": ".3gp", "value": "video/3gpp"},
            {"key": ".3gp2", "value": "video/3gpp2"},
            {"key": ".3gpp", "value": "video/3gpp"},
            {"key": ".7z", "value": "application/x-7z-compressed"},
            {"key": ".aa", "value": "audio/audible"},
            {"key": ".AAC", "value": "audio/aac"},
            {"key": ".aaf", "value": "application/octet-stream"},
            {"key": ".aax", "value": "audio/vnd.audible.aax"},
            {"key": ".ac3", "value": "audio/ac3"},
            {"key": ".aca", "value": "application/octet-stream"},
            {"key": ".accda", "value": "application/msaccess.addin"},
            {"key": ".accdb", "value": "application/msaccess"},
            {"key": ".accdc", "value": "application/msaccess.cab"},
            {"key": ".accde", "value": "application/msaccess"},
            {"key": ".accdr", "value": "application/msaccess.runtime"},
            {"key": ".accdt", "value": "application/msaccess"},
            {"key": ".accdw", "value": "application/msaccess.webapplication"},
            {"key": ".accft", "value": "application/msaccess.ftemplate"},
            {"key": ".acx", "value": "application/internet-property-stream"},
            {"key": ".AddIn", "value": "text/xml"},
            {"key": ".ade", "value": "application/msaccess"},
            {"key": ".adobebridge", "value": "application/x-bridge-url"},
            {"key": ".adp", "value": "application/msaccess"},
            {"key": ".ADT", "value": "audio/vnd.dlna.adts"},
            {"key": ".ADTS", "value": "audio/aac"},
            {"key": ".afm", "value": "application/octet-stream"},
            {"key": ".ai", "value": "application/postscript"},
            {"key": ".aif", "value": "audio/x-aiff"},
            {"key": ".aifc", "value": "audio/aiff"},
            {"key": ".aiff", "value": "audio/aiff"},
            {"key": ".air", "value": "application/vnd.adobe.air-application-installer-package+zip"},
            {"key": ".amc", "value": "application/x-mpeg"},
            {"key": ".application", "value": "application/x-ms-application"},
            {"key": ".art", "value": "image/x-jg"},
            {"key": ".asa", "value": "application/xml"},
            {"key": ".asax", "value": "application/xml"},
            {"key": ".ascx", "value": "application/xml"},
            {"key": ".asd", "value": "application/octet-stream"},
            {"key": ".asf", "value": "video/x-ms-asf"},
            {"key": ".ashx", "value": "application/xml"},
            {"key": ".asi", "value": "application/octet-stream"},
            {"key": ".asm", "value": "text/plain"},
            {"key": ".asmx", "value": "application/xml"},
            {"key": ".aspx", "value": "application/xml"},
            {"key": ".asr", "value": "video/x-ms-asf"},
            {"key": ".asx", "value": "video/x-ms-asf"},
            {"key": ".atom", "value": "application/atom+xml"},
            {"key": ".au", "value": "audio/basic"},
            {"key": ".avi", "value": "video/x-msvideo"},
            {"key": ".axs", "value": "application/olescript"},
            {"key": ".bas", "value": "text/plain"},
            {"key": ".bcpio", "value": "application/x-bcpio"},
            {"key": ".bin", "value": "application/octet-stream"},
            {"key": ".bmp", "value": "image/bmp"},
            {"key": ".c", "value": "text/plain"},
            {"key": ".cab", "value": "application/octet-stream"},
            {"key": ".caf", "value": "audio/x-caf"},
            {"key": ".calx", "value": "application/vnd.ms-office.calx"},
            {"key": ".cat", "value": "application/vnd.ms-pki.seccat"},
            {"key": ".cc", "value": "text/plain"},
            {"key": ".cd", "value": "text/plain"},
            {"key": ".cdda", "value": "audio/aiff"},
            {"key": ".cdf", "value": "application/x-cdf"},
            {"key": ".cer", "value": "application/x-x509-ca-cert"},
            {"key": ".chm", "value": "application/octet-stream"},
            {"key": ".class", "value": "application/x-java-applet"},
            {"key": ".clp", "value": "application/x-msclip"},
            {"key": ".cmx", "value": "image/x-cmx"},
            {"key": ".cnf", "value": "text/plain"},
            {"key": ".cod", "value": "image/cis-cod"},
            {"key": ".config", "value": "application/xml"},
            {"key": ".contact", "value": "text/x-ms-contact"},
            {"key": ".coverage", "value": "application/xml"},
            {"key": ".cpio", "value": "application/x-cpio"},
            {"key": ".cpp", "value": "text/plain"},
            {"key": ".crd", "value": "application/x-mscardfile"},
            {"key": ".crl", "value": "application/pkix-crl"},
            {"key": ".crt", "value": "application/x-x509-ca-cert"},
            {"key": ".cs", "value": "text/plain"},
            {"key": ".csdproj", "value": "text/plain"},
            {"key": ".csh", "value": "application/x-csh"},
            {"key": ".csproj", "value": "text/plain"},
            {"key": ".css", "value": "text/css"},
            {"key": ".csv", "value": "text/csv"},
            {"key": ".cur", "value": "application/octet-stream"},
            {"key": ".cxx", "value": "text/plain"},
            {"key": ".dat", "value": "application/octet-stream"},
            {"key": ".datasource", "value": "application/xml"},
            {"key": ".dbproj", "value": "text/plain"},
            {"key": ".dcr", "value": "application/x-director"},
            {"key": ".def", "value": "text/plain"},
            {"key": ".deploy", "value": "application/octet-stream"},
            {"key": ".der", "value": "application/x-x509-ca-cert"},
            {"key": ".dgml", "value": "application/xml"},
            {"key": ".dib", "value": "image/bmp"},
            {"key": ".dif", "value": "video/x-dv"},
            {"key": ".dir", "value": "application/x-director"},
            {"key": ".disco", "value": "text/xml"},
            {"key": ".dll", "value": "application/x-msdownload"},
            {"key": ".dll.config", "value": "text/xml"},
            {"key": ".dlm", "value": "text/dlm"},
            {"key": ".doc", "value": "application/msword"},
            {"key": ".docm", "value": "application/vnd.ms-word.document.macroEnabled.12"},
            {"key": ".docx", "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
            {"key": ".dot", "value": "application/msword"},
            {"key": ".dotm", "value": "application/vnd.ms-word.template.macroEnabled.12"},
            {"key": ".dotx", "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
            {"key": ".dsp", "value": "application/octet-stream"},
            {"key": ".dsw", "value": "text/plain"},
            {"key": ".dtd", "value": "text/xml"},
            {"key": ".dtsConfig", "value": "text/xml"},
            {"key": ".dv", "value": "video/x-dv"},
            {"key": ".dvi", "value": "application/x-dvi"},
            {"key": ".dwf", "value": "drawing/x-dwf"},
            {"key": ".dwp", "value": "application/octet-stream"},
            {"key": ".dxr", "value": "application/x-director"},
            {"key": ".eml", "value": "message/rfc822"},
            {"key": ".emz", "value": "application/octet-stream"},
            {"key": ".eot", "value": "application/octet-stream"},
            {"key": ".eps", "value": "application/postscript"},
            {"key": ".etl", "value": "application/etl"},
            {"key": ".etx", "value": "text/x-setext"},
            {"key": ".evy", "value": "application/envoy"},
            {"key": ".exe", "value": "application/octet-stream"},
            {"key": ".exe.config", "value": "text/xml"},
            {"key": ".fdf", "value": "application/vnd.fdf"},
            {"key": ".fif", "value": "application/fractals"},
            {"key": ".filters", "value": "Application/xml"},
            {"key": ".fla", "value": "application/octet-stream"},
            {"key": ".flr", "value": "x-world/x-vrml"},
            {"key": ".flv", "value": "video/x-flv"},
            {"key": ".fsscript", "value": "application/fsharp-script"},
            {"key": ".fsx", "value": "application/fsharp-script"},
            {"key": ".generictest", "value": "application/xml"},
            {"key": ".gif", "value": "image/gif"},
            {"key": ".group", "value": "text/x-ms-group"},
            {"key": ".gsm", "value": "audio/x-gsm"},
            {"key": ".gtar", "value": "application/x-gtar"},
            {"key": ".gz", "value": "application/x-gzip"},
            {"key": ".h", "value": "text/plain"},
            {"key": ".hdf", "value": "application/x-hdf"},
            {"key": ".hdml", "value": "text/x-hdml"},
            {"key": ".hhc", "value": "application/x-oleobject"},
            {"key": ".hhk", "value": "application/octet-stream"},
            {"key": ".hhp", "value": "application/octet-stream"},
            {"key": ".hlp", "value": "application/winhlp"},
            {"key": ".hpp", "value": "text/plain"},
            {"key": ".hqx", "value": "application/mac-binhex40"},
            {"key": ".hta", "value": "application/hta"},
            {"key": ".htc", "value": "text/x-component"},
            {"key": ".htm", "value": "text/html"},
            {"key": ".html", "value": "text/html"},
            {"key": ".htt", "value": "text/webviewhtml"},
            {"key": ".hxa", "value": "application/xml"},
            {"key": ".hxc", "value": "application/xml"},
            {"key": ".hxd", "value": "application/octet-stream"},
            {"key": ".hxe", "value": "application/xml"},
            {"key": ".hxf", "value": "application/xml"},
            {"key": ".hxh", "value": "application/octet-stream"},
            {"key": ".hxi", "value": "application/octet-stream"},
            {"key": ".hxk", "value": "application/xml"},
            {"key": ".hxq", "value": "application/octet-stream"},
            {"key": ".hxr", "value": "application/octet-stream"},
            {"key": ".hxs", "value": "application/octet-stream"},
            {"key": ".hxt", "value": "text/html"},
            {"key": ".hxv", "value": "application/xml"},
            {"key": ".hxw", "value": "application/octet-stream"},
            {"key": ".hxx", "value": "text/plain"},
            {"key": ".i", "value": "text/plain"},
            {"key": ".ico", "value": "image/x-icon"},
            {"key": ".ics", "value": "application/octet-stream"},
            {"key": ".idl", "value": "text/plain"},
            {"key": ".ief", "value": "image/ief"},
            {"key": ".iii", "value": "application/x-iphone"},
            {"key": ".inc", "value": "text/plain"},
            {"key": ".inf", "value": "application/octet-stream"},
            {"key": ".inl", "value": "text/plain"},
            {"key": ".ins", "value": "application/x-internet-signup"},
            {"key": ".ipa", "value": "application/x-itunes-ipa"},
            {"key": ".ipg", "value": "application/x-itunes-ipg"},
            {"key": ".ipproj", "value": "text/plain"},
            {"key": ".ipsw", "value": "application/x-itunes-ipsw"},
            {"key": ".iqy", "value": "text/x-ms-iqy"},
            {"key": ".isp", "value": "application/x-internet-signup"},
            {"key": ".ite", "value": "application/x-itunes-ite"},
            {"key": ".itlp", "value": "application/x-itunes-itlp"},
            {"key": ".itms", "value": "application/x-itunes-itms"},
            {"key": ".itpc", "value": "application/x-itunes-itpc"},
            {"key": ".IVF", "value": "video/x-ivf"},
            {"key": ".jar", "value": "application/java-archive"},
            {"key": ".java", "value": "application/octet-stream"},
            {"key": ".jck", "value": "application/liquidmotion"},
            {"key": ".jcz", "value": "application/liquidmotion"},
            {"key": ".jfif", "value": "image/pjpeg"},
            {"key": ".jnlp", "value": "application/x-java-jnlp-file"},
            {"key": ".jpb", "value": "application/octet-stream"},
            {"key": ".jpe", "value": "image/jpeg"},
            {"key": ".jpeg", "value": "image/jpeg"},
            {"key": ".jpg", "value": "image/jpeg"},
            {"key": ".js", "value": "application/x-javascript"},
            {"key": ".json", "value": "application/json"},
            {"key": ".jsx", "value": "text/jscript"},
            {"key": ".jsxbin", "value": "text/plain"},
            {"key": ".latex", "value": "application/x-latex"},
            {"key": ".library-ms", "value": "application/windows-library+xml"},
            {"key": ".lit", "value": "application/x-ms-reader"},
            {"key": ".loadtest", "value": "application/xml"},
            {"key": ".lpk", "value": "application/octet-stream"},
            {"key": ".lsf", "value": "video/x-la-asf"},
            {"key": ".lst", "value": "text/plain"},
            {"key": ".lsx", "value": "video/x-la-asf"},
            {"key": ".lzh", "value": "application/octet-stream"},
            {"key": ".m13", "value": "application/x-msmediaview"},
            {"key": ".m14", "value": "application/x-msmediaview"},
            {"key": ".m1v", "value": "video/mpeg"},
            {"key": ".m2t", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".m2ts", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".m2v", "value": "video/mpeg"},
            {"key": ".m3u", "value": "audio/x-mpegurl"},
            {"key": ".m3u8", "value": "audio/x-mpegurl"},
            {"key": ".m4a", "value": "audio/m4a"},
            {"key": ".m4b", "value": "audio/m4b"},
            {"key": ".m4p", "value": "audio/m4p"},
            {"key": ".m4r", "value": "audio/x-m4r"},
            {"key": ".m4v", "value": "video/x-m4v"},
            {"key": ".mac", "value": "image/x-macpaint"},
            {"key": ".mak", "value": "text/plain"},
            {"key": ".man", "value": "application/x-troff-man"},
            {"key": ".manifest", "value": "application/x-ms-manifest"},
            {"key": ".map", "value": "text/plain"},
            {"key": ".master", "value": "application/xml"},
            {"key": ".mda", "value": "application/msaccess"},
            {"key": ".mdb", "value": "application/x-msaccess"},
            {"key": ".mde", "value": "application/msaccess"},
            {"key": ".mdp", "value": "application/octet-stream"},
            {"key": ".me", "value": "application/x-troff-me"},
            {"key": ".mfp", "value": "application/x-shockwave-flash"},
            {"key": ".mht", "value": "message/rfc822"},
            {"key": ".mhtml", "value": "message/rfc822"},
            {"key": ".mid", "value": "audio/mid"},
            {"key": ".midi", "value": "audio/mid"},
            {"key": ".mix", "value": "application/octet-stream"},
            {"key": ".mk", "value": "text/plain"},
            {"key": ".mmf", "value": "application/x-smaf"},
            {"key": ".mno", "value": "text/xml"},
            {"key": ".mny", "value": "application/x-msmoney"},
            {"key": ".mod", "value": "video/mpeg"},
            {"key": ".mov", "value": "video/quicktime"},
            {"key": ".movie", "value": "video/x-sgi-movie"},
            {"key": ".mp2", "value": "video/mpeg"},
            {"key": ".mp2v", "value": "video/mpeg"},
            {"key": ".mp3", "value": "audio/mpeg"},
            {"key": ".mp4", "value": "video/mp4"},
            {"key": ".mp4v", "value": "video/mp4"},
            {"key": ".mpa", "value": "video/mpeg"},
            {"key": ".mpe", "value": "video/mpeg"},
            {"key": ".mpeg", "value": "video/mpeg"},
            {"key": ".mpf", "value": "application/vnd.ms-mediapackage"},
            {"key": ".mpg", "value": "video/mpeg"},
            {"key": ".mpp", "value": "application/vnd.ms-project"},
            {"key": ".mpv2", "value": "video/mpeg"},
            {"key": ".mqv", "value": "video/quicktime"},
            {"key": ".ms", "value": "application/x-troff-ms"},
            {"key": ".msi", "value": "application/octet-stream"},
            {"key": ".mso", "value": "application/octet-stream"},
            {"key": ".mts", "value": "video/vnd.dlna.mpeg-tts"},
            {"key": ".mtx", "value": "application/xml"},
            {"key": ".mvb", "value": "application/x-msmediaview"},
            {"key": ".mvc", "value": "application/x-miva-compiled"},
            {"key": ".mxp", "value": "application/x-mmxp"},
            {"key": ".nc", "value": "application/x-netcdf"},
            {"key": ".nsc", "value": "video/x-ms-asf"},
            {"key": ".nws", "value": "message/rfc822"},
            {"key": ".ocx", "value": "application/octet-stream"},
            {"key": ".oda", "value": "application/oda"},
            {"key": ".odc", "value": "text/x-ms-odc"},
            {"key": ".odh", "value": "text/plain"},
            {"key": ".odl", "value": "text/plain"},
            {"key": ".odp", "value": "application/vnd.oasis.opendocument.presentation"},
            {"key": ".ods", "value": "application/oleobject"},
            {"key": ".odt", "value": "application/vnd.oasis.opendocument.text"},
            {"key": ".webtest", "value": "application/xml"},
            {"key": ".wiq", "value": "application/xml"},
            {"key": ".wiz", "value": "application/msword"},
            {"key": ".wks", "value": "application/vnd.ms-works"},
            {"key": ".WLMP", "value": "application/wlmoviemaker"},
            {"key": ".wlpginstall", "value": "application/x-wlpg-detect"},
            {"key": ".wlpginstall3", "value": "application/x-wlpg3-detect"},
            {"key": ".wm", "value": "video/x-ms-wm"},
            {"key": ".wma", "value": "audio/x-ms-wma"},
            {"key": ".wmd", "value": "application/x-ms-wmd"},
            {"key": ".wmf", "value": "application/x-msmetafile"},
            {"key": ".wml", "value": "text/vnd.wap.wml"},
            {"key": ".wmlc", "value": "application/vnd.wap.wmlc"},
            {"key": ".wmls", "value": "text/vnd.wap.wmlscript"},
            {"key": ".wmlsc", "value": "application/vnd.wap.wmlscriptc"},
            {"key": ".wmp", "value": "video/x-ms-wmp"},
            {"key": ".wmv", "value": "video/x-ms-wmv"},
            {"key": ".wmx", "value": "video/x-ms-wmx"},
            {"key": ".wmz", "value": "application/x-ms-wmz"},
            {"key": ".wpl", "value": "application/vnd.ms-wpl"},
            {"key": ".wps", "value": "application/vnd.ms-works"},
            {"key": ".wri", "value": "application/x-mswrite"},
            {"key": ".wrl", "value": "x-world/x-vrml"},
            {"key": ".wrz", "value": "x-world/x-vrml"},
            {"key": ".wsc", "value": "text/scriptlet"},
            {"key": ".wsdl", "value": "text/xml"},
            {"key": ".wvx", "value": "video/x-ms-wvx"},
            {"key": ".x", "value": "application/directx"},
            {"key": ".xaf", "value": "x-world/x-vrml"},
            {"key": ".xaml", "value": "application/xaml+xml"},
            {"key": ".xap", "value": "application/x-silverlight-app"},
            {"key": ".xbap", "value": "application/x-ms-xbap"},
            {"key": ".xbm", "value": "image/x-xbitmap"},
            {"key": ".xdr", "value": "text/plain"},
            {"key": ".xht", "value": "application/xhtml+xml"},
            {"key": ".xhtml", "value": "application/xhtml+xml"},
            {"key": ".xla", "value": "application/vnd.ms-excel"},
            {"key": ".xlam", "value": "application/vnd.ms-excel.addin.macroEnabled.12"},
            {"key": ".xlc", "value": "application/vnd.ms-excel"},
            {"key": ".xld", "value": "application/vnd.ms-excel"},
            {"key": ".xlk", "value": "application/vnd.ms-excel"},
            {"key": ".xll", "value": "application/vnd.ms-excel"},
            {"key": ".xlm", "value": "application/vnd.ms-excel"},
            {"key": ".xls", "value": "application/vnd.ms-excel"},
            {"key": ".xlsb", "value": "application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
            {"key": ".xlsm", "value": "application/vnd.ms-excel.sheet.macroEnabled.12"},
            {"key": ".xlsx", "value": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {"key": ".xlt", "value": "application/vnd.ms-excel"},
            {"key": ".xltm", "value": "application/vnd.ms-excel.template.macroEnabled.12"},
            {"key": ".xltx", "value": "application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
            {"key": ".xlw", "value": "application/vnd.ms-excel"},
            {"key": ".xml", "value": "text/xml"},
            {"key": ".xmta", "value": "application/xml"},
            {"key": ".xof", "value": "x-world/x-vrml"},
            {"key": ".XOML", "value": "text/plain"},
            {"key": ".xpm", "value": "image/x-xpixmap"},
            {"key": ".xps", "value": "application/vnd.ms-xpsdocument"},
            {"key": ".xrm-ms", "value": "text/xml"},
            {"key": ".xsc", "value": "application/xml"},
            {"key": ".xsd", "value": "text/xml"},
            {"key": ".xsf", "value": "text/xml"},
            {"key": ".xsl", "value": "text/xml"},
            {"key": ".xslt", "value": "text/xml"},
            {"key": ".xsn", "value": "application/octet-stream"},
            {"key": ".xss", "value": "application/xml"},
            {"key": ".xtp", "value": "application/octet-stream"},
            {"key": ".xwd", "value": "image/x-xwindowdump"},
            {"key": ".z", "value": "application/x-compress"},
            {"key": ".zip", "value": "application/x-zip-compressed"}
        ]
    let index = myList.map((o) => o.key).indexOf(ext);
    let mime = myList[index]["value"];
    return mime

}
<p><input id='fileUpload' type='file' name='fileUpload' onChange='getMime()'></p>
<p>MimeType: <input id='mimeType' type='text' name='mimeType'></p>
Moseley answered 3/5, 2022 at 6:30 Comment(1)
The full array list can be found here jsfiddle.net/smule/7b5pwL3j/1/#&togetherjs=SvdOqdoa8CMoseley
S
0

IANA media types

I wish Microsoft would get their industry standard act together! For others, anyone interested:

Discrete types

Multipart types

I would like to recommend a read of the: MIME types (IANA media types) Mozilla Page for those interested! Its very informative!

Code wise, each of the above links has a .csv file download: https://www.iana.org/assignments/media-types/application.csv

As already pointed out here, a Dictionary or a ConcurrentDictionary, may be an idea for Download and Populate the Dictionary with Key Value pairs.

Smtih answered 22/6, 2009 at 22:36 Comment(0)
A
0

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.

Attract answered 13/3, 2014 at 7:15 Comment(0)
A
0

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:

<PropertyGroup>
    <DefineConstants Condition=" !$(DefineConstants.Contains(';NET')) ">$(DefineConstants);$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
    <DefineConstants Condition=" $(DefineConstants.Contains(';NET')) ">$(DefineConstants.Remove($(DefineConstants.LastIndexOf(";NET"))));$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
</PropertyGroup>

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.

Anastos answered 6/1, 2016 at 12:1 Comment(0)
T
0

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

Trioxide answered 20/5, 2016 at 5:59 Comment(0)
M
0

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 external dependencies
  • No file system access
  • Small memory footprint
  • Simple static methods (no extension methods and no instantiatable classes)
  • Case-insensitive
  • Portable - works in applications targeting any CLR (.NET 2.0+)
Meliamelic answered 20/9, 2016 at 14:18 Comment(0)
F
0

would be better if someone can use similar features as in libmagic on linux, as that is what I guess a better way to detect types of files than relaying on the extension name of a file.

For example, if I rename a file from mypicture.jpg to mypicture.txt On linux, it will still be reported as a picture But using this methodology here, it will be reported as text file.

Regards Tomas

Faber answered 25/11, 2020 at 9:56 Comment(0)
M
-1

Certainly, for combining the advantage of common completeness, dynamics and portability with minimum dependency

you will combine Samuel Neff's static dictionary with a platform specific query as e.g. by Bryan Denny.

E.g. under Linux command line tool ´xdg-mime´ might do the latter part.

Momus answered 26/7, 2020 at 10:3 Comment(0)
P
-2

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?

Palomino answered 13/6, 2013 at 19:51 Comment(0)
B
-9

You can use MimeMappings class. I think this is the easiest way. I give import of MimeMappings too. because I felt lots of trouble to find import of those classes.

import org.springframework.boot.web.server.MimeMappings;    
MimeMappings mm=new MimeMappings();
String mimetype = mm.get(fileExtension);
System.out.println(mimetype);
Barlow answered 19/2, 2021 at 8:57 Comment(1)
this is not c#.Corinthian

© 2022 - 2024 — McMap. All rights reserved.