2009-05-20 115 views
0

假设您有一个带有'file'类型输入标签的html表单。当文件发布到服务器时,它将与相关的元数据一起存储在本地。确定HTTP文件上传的MIME类型的最佳方法是什么?

我能想到的三种方法来确定mime类型:

  • 使用在 '的multipart/form-data的' 有效载荷提供的mime类型。
  • 使用“multipart/form-data”有效内容中提供的文件名并根据文件扩展名查找MIME类型。
  • 扫描原始文件数据并使用MIME类型猜测库。

这些解决方案都不是完美的。

哪一个是最准确的解决方案?
有没有更好的选择?

回答

1

如果你正在使用PHP,那么你可以使用

http://pecl.php.net/package/Fileinfo

这将检查文件的许多方面。对于Python你可以使用

http://pypi.python.org/pypi/python-magic/0.1

这是在Linux/Unix的libmagic绑定和可能的Windows?系统。参见:

man magic 
man libmagic 

在Linux上。它使用幻数测试来尝试和声明MIME类型的文件。

我喜欢神奇数字方法,因为它可以捕捉错误的扩展名和很多诡计,如果您正在处理上传的网络服务器上的文件。这些测试通常是一次性的,因此通过文件读取的性能可以忽略不计。

1

我不认为你可以依靠任何一个作为确定“我是mime类型x”。前两个问题是,由于客户端(浏览器或其他)的问题或来自各种客户端的误导性请求(各种黑客攻击等),所提供的内容类型可能不正确。

因此,您应该尝试并结合每种类型的信息并计算出某种置信度。如果文件扩展名为.doc,MIME类型为application/msword,那么这是一个很好的机会,它是一个word文档,但是通过MIME类型检测实用程序运行它只是为了确保。

应该有一个解决方案可用于使用您正在使用的语言进行MIME魔法检测 - 但您没有提及哪一个。它们通常都是通过查看文件的前几个字节/字符并将它们与MIME类型的查找表进行匹配。有些还从文件中删除BOM以帮助完成此操作。如果无法检测到MIME类型,它们通常会回到纯文本。

如果你想有一个独立于平台的方式来这再看看现有的各种Java库:

相关问题