假设您有一个带有'file'类型输入标记的html表单。当文件发布到服务器时,它将与本地存储在一起,以及相关的元数据。
我可以想出三种确定mime类型的方法:
这些解决方案都不是完美的。
哪种解决方案最准确?
还有其他更好的选择吗?
答案 0 :(得分:1)
如果您使用的是PHP,则可以使用
http://pecl.php.net/package/Fileinfo
将检查文件的许多方面。对于Python,您可以使用
http://pypi.python.org/pypi/python-magic/0.1
在Linux / Unix和Windows上,libmagic的绑定是什么?系统。参见:
man magic
man libmagic
在Linux上。它使用幻数测试来尝试和断言mime类型的文件。
我喜欢神奇的数字方法,因为如果您正在处理上传的网络服务器上的文件,它可以捕获错误的扩展和很多欺骗。这些测试通常是一次性的,因此读取文件的性能可以忽略不计。
答案 1 :(得分:1)
我认为你不能依赖其中任何一个作为明确的“我是mime type x”。前两个问题是提供的内容类型可能不正确,因为客户端(浏览器或其他方面)的问题或来自不同客户端的误导性请求(各种黑客尝试等等)。
所以你应该尝试组合每种类型的信息并计算出某种可信度。如果文件扩展名为.doc且mime类型为application / msword,那么它很可能是word文档,但是通过mime类型检测实用程序运行它只是为了确保。
应该有一个解决方案可用于使用你正在使用的语言进行mime魔法检测 - 你没有提到哪一个。它们通常通过查看文件的前几个字节/字符来工作,并将它们与mime类型的查找表进行匹配。有些还会从文件中删除BOM以帮助解决此问题。如果无法检测到mime类型,它们通常会回归到纯文本。
如果您想要一种独立于平台的方法,那么请查看存在的各种Java库: