Ruby On Rails电子表格 - 验证文件类型

时间:2011-07-16 23:21:55

标签: ruby-on-rails ruby validation spreadsheet

我正在使用rails Spreadsheet gem(http://spreadsheet.rubyforge.org/GUIDE_txt.html)将excel数据导入我的应用程序。

我可以让Excel文件上传正常并使用:

book = Spreadsheet.open filePath

打开文件

如果文件是有效的Excel文件,这可以正常工作,但如果我的用户决定上传随机图像文件或其他内容,我会收到此错误:

OLE2签名无效

这是可以理解的。

在打开文件之前,我无法找到验证文件的方法。如果我可以提供帮助,我宁愿不通过文件扩展名做,有人知道在打开它之前尝试按内容类型验证文件的方法吗?

Ta,Jo

1 个答案:

答案 0 :(得分:2)

有许多方法可以验证文件类型,但大多数方法都是通过检查文件扩展名。

如果您不想这样做并且您可以访问'file'命令,可以试试这个:

class File
  def type_from_file_command
    type = (self.original_filename.match(/\.(\w+)$/)[1] rescue "octet-stream").downcase
    mime_type = `file -b --mime-type #{self.path}`.split(':').last.strip rescue "application/x-#{type}"
    mime_type = "application/x-#{type}" if mime_type.match(/\(.*?\)/)
    mime_type
  end
end

ruby-1.9.2-p290 :030 > a = File.open("/path/nube_minilogo.psd")
 => #<File:/path/nube_minilogo.psd> 
ruby-1.9.2-p290 :031 > a.type_from_file_command
 => "image/vnd.adobe.photoshop"

改编自Paperclip。