为什么Urlmon.dll的FindMimeFromData函数返回MIME类型“application / octet”

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

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

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

问题与此类似,但由于返回的MIME类型不同/不明确,所提供的解决方案不适用于验证上传的文件。


阅读FindMimeFromData的文档可让我在Internet Explorer中进行MIME类型检测。 根据这些信息,它被硬编码以找到26种不同的MIME类型,这在当今世界非常小。 “音频/ mp3”不是其中之一。

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

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


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

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

链接地址: http://www.djcxy.com/p/46917.html

上一篇: Why does the FindMimeFromData function from Urlmon.dll return MIME type “application/octet

下一篇: Is there a way to infer what image format a file is, without reading the entire file?