Reputation: 1287
How can I get file extension by content type ?
Example I know that file is "text/css" so extension will be ".css".
private static string GetExtension(string contentType)
{
string ext = ".";
{ DETERMINATION CODE IN HERE }
return ext;
}
Upvotes: 37
Views: 46501
Reputation: 17001
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? Extension(string mimeType)
{
using var key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false);
var value = key?.GetValue("Extension", null);
return value?.ToString();
}
Also please note that this solution will only be available on Windows only RegistryKey.OpenSubKey(string, bool)
is only supported on: 'windows'.
Upvotes: 37
Reputation: 3688
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);
}
Upvotes: 67