PSSGCSim
PSSGCSim

Reputation: 1287

C# Get file extension by content type

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

Answers (2)

Bradley Uffner
Bradley Uffner

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

Marcell Toth
Marcell Toth

Reputation: 3688

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

Upvotes: 67

Related Questions