I thought this would be built into .NET but I guess it's not. The first way to do this is to use the registry like
Kaushik Chakraborti does.
Since you may have security issues with doing that on a shared hosting provider I decided to take the list of Mime Types I found at
FeedForAll (which appears to be link bait but oh well) and make a C# Dictionary out of them.
This comes in handy if you want to do something like this in MVC:
public ActionResult Image()
{
string filePath = "SOME-FILE.png";
return base.File(filePath, MimeTypes.GetMimeTypeOrDefault(System.IO.Path.GetExtension(filePath), "binary/octet-stream"));
}
You can find the latest version of this library on
GitHub.
using System;
using System.Collections.Generic;
using System.Linq;
/// <summary>
/// Dictionary of Mime Types by File Extension.
/// Created by CDeutsch.
/// License:
/// http://creativecommons.org/licenses/by/3.0/
/// Original list created from here:
/// http://www.feedforall.com/mime-types.htm
/// </summary>
public static class MimeTypes
{
public static Dictionary<string, string> MimeTypeDictionary = new Dictionary<string, string>
{
{".ai", "application/postscript"},
{".aif", "audio/x-aiff"},
{".aifc", "audio/x-aiff"},
{".aiff", "audio/x-aiff"},
{".asc", "text/plain"},
{".atom", "application/atom+xml"},
{".au", "audio/basic"},
{".avi", "video/x-msvideo"},
{".bcpio", "application/x-bcpio"},
{".bin", "application/octet-stream"},
{".bmp", "image/bmp"},
{".cdf", "application/x-netcdf"},
{".cgm", "image/cgm"},
{".class", "application/octet-stream"},
{".cpio", "application/x-cpio"},
{".cpt", "application/mac-compactpro"},
{".csh", "application/x-csh"},
{".css", "text/css"},
{".dcr", "application/x-director"},
{".dif", "video/x-dv"},
{".dir", "application/x-director"},
{".djv", "image/vnd.djvu"},
{".djvu", "image/vnd.djvu"},
{".dll", "application/octet-stream"},
{".dmg", "application/octet-stream"},
{".dms", "application/octet-stream"},
{".doc", "application/msword"},
{".dtd", "application/xml-dtd"},
{".dv", "video/x-dv"},
{".dvi", "application/x-dvi"},
{".dxr", "application/x-director"},
{".eps", "application/postscript"},
{".etx", "text/x-setext"},
{".exe", "application/octet-stream"},
{".ez", "application/andrew-inset"},
{".gif", "image/gif"},
{".gram", "application/srgs"},
{".grxml", "application/srgs+xml"},
{".gtar", "application/x-gtar"},
{".hdf", "application/x-hdf"},
{".hqx", "application/mac-binhex40"},
{".htm", "text/html"},
{".html", "text/html"},
{".ice", "x-conference/x-cooltalk"},
{".ico", "image/x-icon"},
{".ics", "text/calendar"},
{".ief", "image/ief"},
{".ifb", "text/calendar"},
{".iges", "model/iges"},
{".igs", "model/iges"},
{".jnlp", "application/x-java-jnlp-file"},
{".jp2", "image/jp2"},
{".jpe", "image/jpeg"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".js", "application/x-javascript"},
{".kar", "audio/midi"},
{".latex", "application/x-latex"},
{".lha", "application/octet-stream"},
{".lzh", "application/octet-stream"},
{".m3u", "audio/x-mpegurl"},
{".m4a", "audio/mp4a-latm"},
{".m4b", "audio/mp4a-latm"},
{".m4p", "audio/mp4a-latm"},
{".m4u", "video/vnd.mpegurl"},
{".m4v", "video/x-m4v"},
{".mac", "image/x-macpaint"},
{".man", "application/x-troff-man"},
{".mathml", "application/mathml+xml"},
{".me", "application/x-troff-me"},
{".mesh", "model/mesh"},
{".mid", "audio/midi"},
{".midi", "audio/midi"},
{".mif", "application/vnd.mif"},
{".mov", "video/quicktime"},
{".movie", "video/x-sgi-movie"},
{".mp2", "audio/mpeg"},
{".mp3", "audio/mpeg"},
{".mp4", "video/mp4"},
{".mpe", "video/mpeg"},
{".mpeg", "video/mpeg"},
{".mpg", "video/mpeg"},
{".mpga", "audio/mpeg"},
{".ms", "application/x-troff-ms"},
{".msh", "model/mesh"},
{".mxu", "video/vnd.mpegurl"},
{".nc", "application/x-netcdf"},
{".oda", "application/oda"},
{".ogg", "application/ogg"},
{".pbm", "image/x-portable-bitmap"},
{".pct", "image/pict"},
{".pdb", "chemical/x-pdb"},
{".pdf", "application/pdf"},
{".pgm", "image/x-portable-graymap"},
{".pgn", "application/x-chess-pgn"},
{".pic", "image/pict"},
{".pict", "image/pict"},
{".png", "image/png"},
{".pnm", "image/x-portable-anymap"},
{".pnt", "image/x-macpaint"},
{".pntg", "image/x-macpaint"},
{".ppm", "image/x-portable-pixmap"},
{".ppt", "application/vnd.ms-powerpoint"},
{".ps", "application/postscript"},
{".qt", "video/quicktime"},
{".qti", "image/x-quicktime"},
{".qtif", "image/x-quicktime"},
{".ra", "audio/x-pn-realaudio"},
{".ram", "audio/x-pn-realaudio"},
{".ras", "image/x-cmu-raster"},
{".rdf", "application/rdf+xml"},
{".rgb", "image/x-rgb"},
{".rm", "application/vnd.rn-realmedia"},
{".roff", "application/x-troff"},
{".rtf", "text/rtf"},
{".rtx", "text/richtext"},
{".sgm", "text/sgml"},
{".sgml", "text/sgml"},
{".sh", "application/x-sh"},
{".shar", "application/x-shar"},
{".silo", "model/mesh"},
{".sit", "application/x-stuffit"},
{".skd", "application/x-koan"},
{".skm", "application/x-koan"},
{".skp", "application/x-koan"},
{".skt", "application/x-koan"},
{".smi", "application/smil"},
{".smil", "application/smil"},
{".snd", "audio/basic"},
{".so", "application/octet-stream"},
{".spl", "application/x-futuresplash"},
{".src", "application/x-wais-source"},
{".sv4cpio", "application/x-sv4cpio"},
{".sv4crc", "application/x-sv4crc"},
{".svg", "image/svg+xml"},
{".swf", "application/x-shockwave-flash"},
{".t", "application/x-troff"},
{".tar", "application/x-tar"},
{".tcl", "application/x-tcl"},
{".tex", "application/x-tex"},
{".texi", "application/x-texinfo"},
{".texinfo", "application/x-texinfo"},
{".tif", "image/tiff"},
{".tiff", "image/tiff"},
{".tr", "application/x-troff"},
{".tsv", "text/tab-separated-values"},
{".txt", "text/plain"},
{".ustar", "application/x-ustar"},
{".vcd", "application/x-cdlink"},
{".vrml", "model/vrml"},
{".vxml", "application/voicexml+xml"},
{".wav", "audio/x-wav"},
{".wbmp", "image/vnd.wap.wbmp"},
{".wbmxl", "application/vnd.wap.wbxml"},
{".wml", "text/vnd.wap.wml"},
{".wmlc", "application/vnd.wap.wmlc"},
{".wmls", "text/vnd.wap.wmlscript"},
{".wmlsc", "application/vnd.wap.wmlscriptc"},
{".wrl", "model/vrml"},
{".xbm", "image/x-xbitmap"},
{".xht", "application/xhtml+xml"},
{".xhtml", "application/xhtml+xml"},
{".xls", "application/vnd.ms-excel"},
{".xml", "application/xml"},
{".xpm", "image/x-xpixmap"},
{".xsl", "application/xml"},
{".xslt", "application/xslt+xml"},
{".xul", "application/vnd.mozilla.xul+xml"},
{".xwd", "image/x-xwindowdump"},
{".xyz", "chemical/x-xyz"},
{".zip", "application/zip"}
};
/// <summary>
/// Returns the Dictionary entry that matches the Extension.
/// </summary>
/// <param name="Extension"></param>
/// <returns></returns>
public static KeyValuePair<string, string> FindByExtension(string Extension)
{
return MimeTypeDictionary.SingleOrDefault(oo => oo.Key.ToLowerInvariant() == Extension.ToLowerInvariant());
}
/// <summary>
/// Returns the MimeType that matches the Extension. If no match is found an error is thrown.
/// </summary>
/// <param name="Extension"></param>
/// <returns></returns>
public static string GetMimeType(string Extension)
{
var rslt = FindByExtension(Extension);
if (!string.IsNullOrWhiteSpace(rslt.Value))
return rslt.Value;
else
throw new ApplicationException("Unknown Extension.");
}
/// <summary>
/// Returns the MimeType that matches the Extension. If no match is found the default value is returned.
/// </summary>
/// <param name="Extension"></param>
/// <param name="Default"></param>
/// <returns></returns>
public static string GetMimeTypeOrDefault(string Extension, string Default)
{
var rslt = FindByExtension(Extension);
if (!string.IsNullOrWhiteSpace(rslt.Value))
return rslt.Value;
else
return Default;
}
/// <summary>
/// Returns the Dictionary entry that matches the MimeType.
/// </summary>
/// <param name="MimeType"></param>
/// <returns></returns>
private static KeyValuePair<string, string> FindByMimeType(string MimeType)
{
return MimeTypeDictionary.SingleOrDefault(oo => oo.Value.ToLowerInvariant() == MimeType.ToLowerInvariant());
}
/// <summary>
/// Returns the Extension that matches the MimeType. If no match is found an error is thrown.
/// </summary>
/// <param name="MimeType"></param>
/// <returns></returns>
public static string GetExtension(string MimeType)
{
var rslt = FindByMimeType(MimeType);
if (!string.IsNullOrWhiteSpace(rslt.Key))
return rslt.Key;
else
throw new ApplicationException("Unknown Mime Type.");
}
/// <summary>
/// Returns the Extension that matches the MimeType. If no match is found the default value is returned.
/// </summary>
/// <param name="MimeType"></param>
/// <param name="Default"></param>
/// <returns></returns>
public static string GetExtensionOrDefault(string MimeType, string Default)
{
var rslt = FindByMimeType(MimeType);
if (!string.IsNullOrWhiteSpace(rslt.Key))
return rslt.Key;
else
return Default;
}
}