【问题标题】:Why does the FindMimeFromData function from Urlmon.dll return MIME type “application/octet-stream” for many file types?为什么 Urlmon.dll 中的 FindMimeFromData 函数为许多文件类型返回 MIME 类型“application/octet-stream”?
【发布时间】:2011-06-17 12:21:24
【问题描述】:

为什么 Urlmon.dll 中的 FindMimeFromData 函数会为许多文件类型返回 MIME 类型“application/octet-stream”,而通过文件扩展名检查 MIME 类型(即针对 Windows 注册表)返回更精确的类型?

例如,mp3 是“application/octet-stream”而不是“audio/mp3”。

基本上,我想验证一个扩展名不正确的上传文件。此方法似乎适用于许多图像文件、xml 等。

问题类似于this one,但提供的解决方案不适合验证上传的文件,因为返回的 MIME 类型不同/不明确。

【问题讨论】:

    标签: c# .net mime mime-types


    【解决方案1】:

    阅读FindMimeFromData 的文档将我带到MIME Type Detection in Internet Explorer。根据该信息,很难找到26 different MIME types,这在当今世界相当小。 “音频/mp3”不是其中之一。

    FindMimeFromData 包含针对(目前 26 个)独立 MIME 类型的硬编码测试(请参阅已知 MIME 类型)。这意味着如果给定缓冲区包含这些 MIME 类型之一格式的数据,则 FindMimeFromData 中存在一个测试,该测试旨在(通过扫描缓冲区内容)识别相应的 MIME 类型。如果一个 MIME 类型是这些 N 个 MIME 类型之一,那么它就是已知的。如果 MIME 类型是“text/plain”、“application/octet-stream”、空字符串或 null(即服务器未能提供),则 MIME 类型不明确。

    不幸的是,FindMimeFromData 似乎对于确定现代 MIME 类型不是很有用。

    【讨论】:

      【解决方案2】:

      这里有一个很好的解决方案:https://stackoverflow.com/a/9435701/74585 如果 FindMimeFromData 返回 "application/octet-stream" "text/plain" 或什么都不返回,它会尝试从注册表中确定文件类型(通过文件扩展名?)。

      这是一个 .NET 文件类型检测库 http://filetypedetective.codeplex.com/,但它目前只检测到少量文件。

      【讨论】:

        猜你喜欢
        • 2011-09-19
        • 2017-11-01
        相关资源
        最近更新 更多