如何使用PaperClip按其内容而不是其扩展名验证上传的png图像

时间:2013-11-13 22:40:47

标签: ruby-on-rails imagemagick paperclip

我的模型看起来像:

class Art < ActiveRecord::Base
  attr_accessible :image
  has_attached_file :image, :styles => { :medium => "620x620>", :thumb => "200x200>" }
  validates_attachment :image, :content_type =>  { :content_type => "image/png" }
end

它验证并允许我上传PNG文件png_file.png并且不允许我上传JPG文件jpg_file.jpg。

但如果我将PNG文件重命名为png_file.jpg,则不允许我上传图像。如果我将JPG文件重命名为jpg_file.png,则错误地成功上传文件。

我想知道如何通过其真实内容而不是文件扩展名来验证上传的文件。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用原始二进制文件读取文件,并检查它是否为PNG类型:

File.open('path-to-your-file', 'rb').read(9).include?('PNG')

9magic number of file