是否可以通过ResourceManager检索.NET资源项的实际内容类型(MIME类型)?

时间:2012-08-23 08:41:49

标签: .net resources mime-types content-type

在.NET资源文件中,可以插入各种类型的内容 - 从纯文本到图像,后者表示为base64编码的字节数组(至少看起来像resx文件中的那样)。

我的目的是能够在应用程序中列出资源并显示其他信息,如内容(MIME)类型,大小(以字节为单位)等。我需要分组并按以下方式对资源进行排序/过滤内容类型。

我的问题是 - 是否可以检索资源项的正确MIME类型。例如,如果我在应用程序资源中存储了JPG图像,我希望将其内容类型设置为image/jpeg。如果我存储了JSON文本,我希望其MIME类型为application/json

是否可以通过.NET标准资源管理功能来实现这一目标?

2 个答案:

答案 0 :(得分:1)

嗯,我想这既是肯定也不是。根据{{​​3}},可以使用专门准备的资源,因此:对于任何具有资源的给定文件,只有具有此类信息的文件,它是否定的。我也找不到在VS2010中使用resx编辑器显示类型和mimetype列的方法。它显示属性中的文件类型,但不显示mimetype。

答案 1 :(得分:0)

我已经阅读了许多关于MIME类型检索的相关问题。大多数情况与使用物理文件有关。但是,在资源场景中,情况并非总是如此,因为按名称获取资源会返回几乎任何东西的对象。此外,根据对象的二进制表示确定mime类型还有其他明显的缺点1)它不保证类似类型的正确性(.docx文件可能被错误地识别为application/zip)或导致性能他们需要处理对象字节的降级。

所以,我认为定义资源的人负责他们所代表的内容类型。因此,我决定基于资源集名称和资源名称定义mime类型映射,这是应用程序配置的一部分。这将增加内容类型描述,因为添加了新资源,但是很容易管理,不需要重建应用程序。

例如,具有以下内容的自定义配置部分可以完成此任务:

<resourceContentTypeMapping>
    <resourceSet name="CommonResources" defaultContentType="text/plain">
       <!-- This would map enties in CommonResource.resx file -->
       <item key="AppIcon" contentType="image/jpeg" />
    </resourceSet>

    <resourceSet name="SomeOtherResources" defaultContentType="text/plain">
        ...
    </resourceSet>

    ...
</resourceContentTypeMapping>

defaultContentType属性确定为所有未映射的资源返回的内容类型。由于资源文件中的大多数项都是字符串,因此我认为text/plain可以简化我的工作,因为我只需要描述非文本资源。分组到资源集允许从单个resx文件中唯一地描述资源项。