【问题标题】:Get extension from Content-Type从 Content-Type 获取扩展
【发布时间】:2013-01-07 04:05:38
【问题描述】:

这是一个非常直接的问题。

我有一个以字符串形式存储的Content-Type

理想情况下,我想从 Content-Type 推断出一个扩展,而不必有一个巨大的讨厌的开关盒。

是否有内置结构来实现这一点?

顺便说一句,我发现了这个question,但从扩展到内容类型的方向相反。

【问题讨论】:

标签: c# content-type file-extension


【解决方案1】:

您需要Dictionary。这将允许您查找给定内容类型的扩展:

Dictionary<string, string> extensionLookup = new Dictionary<string, string>()
{
    {"ContentType1", ".ext1"},
    {"ContentType2", ".ext2"},
};

您可以根据数据库表、文件等来填充字典,而不是对值进行硬编码。

一旦您拥有Dictionary,就很简单:

string extension = extensionLookup[someContentType];

【讨论】:

  • 这假设我提前知道所有可能的扩展。如您所知,这几乎是不可能的,对吧?
  • @MikeFielden 它没有这样的假设:"You can populate the dictionary based on a database table, a file, etc. rather than hard coding the values." 您需要从 somewhere 获取映射,但您可以在运行时获取这些映射并将它们添加到在编译时不知道它们是什么的字典。
  • 不,我明白你在说什么,我只是希望 IIS 有类似 Apache 的 Tika :) 之类的东西
  • 在 .NET 4.5 中可以通过调用 System.Web.MimeMapping.GetMimeMapping(string fileName) 进行反向操作。我希望也有一种方法可以从 IIS 获取给定内容类型的正确文件扩展名。
【解决方案2】:

在我的 W10 盒子的注册表中有一个广泛的列表,将内容类型映射到 .extn

[HKEY_CLASSES_ROOT\MIME\Database\Content Type]

您可能想探索HtmlAgilityPack OSS project,它的源文件HtmlWeb.cs 包含以下方法:

public static string GetContentTypeForExtension(string extension, string def)
public static string GetExtensionForContentType(string contentType, string def)

还有[注释掉]字典和人口代码:

//private static Dictionary<string, string> _mimeTypes;
//        _mimeTypes = new Dictionary<string, string>();
//        _mimeTypes.Add(".3dm", "x-world/x-3dmf");
//        _mimeTypes.Add(".3dmf", "x-world/x-3dmf");
//    ...
//        _mimeTypes.Add(".zoo", "application/octet-stream");
//        _mimeTypes.Add(".zsh", "text/x-script.zsh");

因此,您可以自己酿造(也许只是您的应用需要的常见的)以提高效率。

仅供参考,内容类型值和用法的权威列表在这里: www.iana.org/assignments/media-types/media-types.xhtml

【讨论】:

  • 不知道为什么这被否决了,这个答案对我帮助很大。点赞
猜你喜欢
  • 2011-06-21
  • 2019-05-01
  • 1970-01-01
  • 2023-03-19
  • 2014-01-28
  • 2015-06-22
  • 2013-06-27
  • 2021-08-15
相关资源
最近更新 更多