【问题标题】:Is it possible to retrieve the actual content type (MIME type) of a .NET resource item via ResourceManager?是否可以通过 ResourceManager 检索 .NET 资源项的实际内容类型(MIME 类型)?
【发布时间】:2012-08-23 08:41:48
【问题描述】:

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

我的目的是能够列出应用程序中的资源并显示其他信息,例如内容 (MIME) 类型、大小(以字节为单位)等。我需要按内容类型。

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

是否可以通过 .NET 标准的资源管理功能来做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 此外,似乎二进制数据是使用一种奇怪的 mime 类型(某种东西.../base64)存储的,而不是真正的内容。看来我必须提供描述资源内容类型的附加数据源。这是一个开销,因为随着资源的变化,必须维护描述数据源,我想避免这种情况。
    【解决方案2】:

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

    所以,我认为定义资源的人负责它们所代表的内容类型。因此,我决定根据资源集名称和资源名称来定义 mime 类型映射,这是应用程序配置的一部分。这将导致在添加新资源时添加内容类型描述的额外工作,但很容易管理并且不需要重新构建应用程序。

    例如,具有以下内容的 custom 配置部分可以完成这项工作:

    <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 文件中唯一地描述资源项。

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2018-07-19
      • 2018-05-27
      • 1970-01-01
      • 2015-02-24
      • 2011-01-13
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多