我正在使用rails Spreadsheet gem(http://spreadsheet.rubyforge.org/GUIDE_txt.html)将excel数据导入我的应用程序。
我可以让Excel文件上传正常并使用:
book = Spreadsheet.open filePath
打开文件
如果文件是有效的Excel文件,这可以正常工作,但如果我的用户决定上传随机图像文件或其他内容,我会收到此错误:
OLE2签名无效
这是可以理解的。
在打开文件之前,我无法找到验证文件的方法。如果我可以提供帮助,我宁愿不通过文件扩展名做,有人知道在打开它之前尝试按内容类型验证文件的方法吗?
Ta,Jo
答案 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。