2009-05-25 114 views
0

如何改变这个代码位,所以我只允许PDF文件上传:只允许PDF文件被上传

unless @file.content_type =~ /^image/ 
    errors.add(:file, "is not a recognized format") 
    return false 
end 

回答

2

没有使用过这一点,但在PDF MIME类型的应用程序/ PDF ,所以它应该只是:

unless @file.content_type =~ /^application\/pdf$/ 
3

当然,该代码是可怕的不安全。它依靠浏览器发送文件来获取正确的MIME类型,并假定没有人发送黑客请求。

坦率地说,除非您打开文件并对其进行解析,否则无法确定上传的任何文件是否属于特定类型。

+0

这是正确的。当然,您可以首先拒绝基于MIME类型的文件,但最终您将不得不使用安全的解析器并处理任何错误。 – 2009-05-25 13:49:02

2

你将不得不:

  1. 接受上传;
  2. 尝试在某些库中打开PDF;
  3. 如果无法打开文件,请拒绝该文件。

您不能依赖浏览器提供给您的MIME类型。 只有这样做的方法是验证文件。您可以使用标记等来检查格式,但最简单和最健壮的方法是使用适当的库调用打开它。

+0

为什么你不能依赖MIME类型? – alamodey 2009-05-25 13:24:27