为什么Urlmon.dll中的FindMimeFromData函数对许多文件类型返回MIME类型"application/octet-stream"?

10
为什么Urlmon.dll中的FindMimeFromData函数返回许多文件类型的“application/octet-stream” MIME 类型,而通过文件扩展名(即针对Windows注册表)检查 MIME 类型会返回更精确的类型?
例如,mp3 是“application/octet-stream”,而不是 “audio/mp3”。
基本上,我想验证上传了带有不正确扩展名的文件。这种方法似乎适用于许多图像文件、xml 等。
这个问题类似于这个,但提供的解决方案不适用于验证上传的文件,因为返回的 MIME 类型不同/模糊。
2个回答

5
阅读FindMimeFromData的文档后,我发现了Internet Explorer中的MIME类型检测。根据该信息,它是硬编码查找26种不同的MIME类型,在今天的世界中这相当少。 "audio/mp3"不是其中之一。

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

不幸的是,看起来FindMimeFromData对于确定现代MIME类型并不是很有用。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接