C#按内容类型获取文件扩展名

Posted

技术标签:

【中文标题】C#按内容类型获取文件扩展名【英文标题】:C# Get file extension by content type 【发布时间】:2014-05-30 01:10:29 【问题描述】:

如何按内容类型获取文件扩展名?

例如,我知道文件是“text/css”,所以扩展名是“.css”。

private static string GetExtension(string contentType)

    string ext = ".";

     DETERMINATION CODE IN HERE 

    return ext;

【问题讨论】:

写入并填充已知类型的Dicionary 投反对票是怎么回事? 我认为投反对票是因为发帖人要求我们为他编写代码,而不是发布尝试过的内容并提出具体问题。 如果您甚至不知道从哪里开始,就很难编写您尝试过的代码。对我来说,这似乎是一个完全合理且具体的问题。 【参考方案1】:

我所知道的“最佳”解决方案是查询注册表。您可以在此处找到示例代码。 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;
    

【讨论】:

using Microsoft.Win32; 如果您从中获取扩展名的系统可以打开文件,则此方法有效。对于 xls,您需要安装 Excel 等 嗨@mayowa ogundele,如果系统无法打开文件,根据内容类型获取文件扩展名的替代解决方案是什么。我们不能使用字典,因为它不接受重复的键(因为内容类型重复)。请建议..谢谢! 嗨 Bhargav,您可能想试试 Nuget 的 MediaTypeMap。见链接github.com/samuelneff/…。希望能满足你【参考方案2】:

[2019] .NET Core / Standard 兼容便携方式

虽然 Bradley 的答案在运行 .NET Framework 的常规旧 Windows 机器上仍然是完美的,但 Registry 是特定于 Windows 的,在将应用程序移植到非 Windows 环境时会失败。。 p>

幸运的是,这里有一个非常小的 NuGet 库,它基本上包含官方 MIME 类型和相应扩展的硬编码映射没有任何外部依赖项:https://github.com/samuelneff/MimeTypeMap。它在 NuGet 上以MediaTypeMap 提供。安装后调用它的包很简单:

MimeTypeMap.GetExtension("audio/wav")

要将其放入您的示例中,您可以简单地:

private static string GetExtension(string contentType)

    return MimeTypes.MimeTypeMap.GetExtension(contentType);

【讨论】:

一行代码就是我喜欢懒惰开发者的原因! 很棒的东西完美运行,因为我在 Azure 上运行的 webapp 不能依赖注册表方法

以上是关于C#按内容类型获取文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

在java中确定文件的实际内容类型[重复]

上传文件时获取不正确的文件扩展名和内容类型

从内容而不是从扩展名中获取文件类型[重复]

当您知道内容类型时如何获得正确的文件扩展名

如何使用 PHP < 5.3 获取文件内容类型?

如何在不基于扩展的 IOS 中获取 Mime 类型