如何从文件扩展名中获得MIME类型?


当前回答

你可以使用这个helper函数:

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

其他回答

受到塞缪尔回答的启发,我写了一个改进版本:

当扩展名是大写时也适用。 以文件名为输入,优雅地处理没有扩展名的文件。 不要在键中包含“。”。 列表,为此我编写了一个小型转换脚本。

最终的源代码超过30K个字符,所以我不能张贴在这里,在Github上检查它。

为了让Shimmy的回答更清楚:

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

当然,为了将通用完整性、动态性和可移植性的优势与最小的依赖性结合起来

你将结合Samuel Neff的静态字典与特定平台的查询,例如由Bryan Denny。

例如,在Linux下,命令行工具“xdg-mime”可以完成后面的部分。

使用MimeTypeMap包,它提供了文件扩展名到mime类型以及mime类型到文件扩展名的巨大双向映射

使用mimetype;

获取扩展的mime类型

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

获取mime类型的扩展名

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

GitHub网址:https://github.com/samuelneff/MimeTypeMap

你可以使用这个helper函数:

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