C# Get file extension by content type
[2019] .NET Core / Standard compatible portable way
While Bradley's answer continues to be perfect on regular old Windows machines running .NET Framework, Registry
is Windows-specific and will fail when porting the app to a non-Windows environment.
Fortunately there is a very small NuGet library that essentially contains a hardcoded map of the official MIME types and corresponding extensions without any external dependencies here: https://github.com/samuelneff/MimeTypeMap. It is available on NuGet as MediaTypeMap. After installing the package calling it is as simple as:
MimeTypeMap.GetExtension("audio/wav")
To put it into your example you can simply:
private static string GetExtension(string contentType)
{
return MimeTypes.MimeTypeMap.GetExtension(contentType);
}
The "Best" solution that I know of is to query the registry. You can find example code here. http://cyotek.com/blog/mime-types-and-file-extensions
public static string GetDefaultExtension(string mimeType)
{
string result;
RegistryKey key;
object value;
key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false);
value = key != null ? key.GetValue("Extension", null) : null;
result = value != null ? value.ToString() : string.Empty;
return result;
}