Rails - Paperclip - 如何在保存之前检查图像尺寸

AnA*_*ice 14 ruby-on-rails paperclip ruby-on-rails-3

我有一个带回形针的Rails 3应用程序.我想通过回形针保存宽度/高度为LTE 50x50的图像.

这可能吗?

And*_*rew 36

是的!这是我为我的应用程序编写的自定义验证,它应该逐字逐句地在你的工作中,只需将像素设置为你想要的任何颜色.

def file_dimensions
  dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
  self.width = dimensions.width
  self.height = dimensions.height
  if dimensions.width < 50 && dimensions.height < 50
    errors.add(:file,'Width or height must be at least 50px')
  end
end
Run Code Online (Sandbox Code Playgroud)

有一点需要注意,我使用self.width=并且self.height=为了将维度保存到数据库,如果您不关心存储图像尺寸,可以将它们保留.

检查宽度和高度意味着只有一个必须大于50px.如果你想确保BOTH超过50,具有讽刺意味的是,需要检查宽度或高度.对我来说,似乎很奇怪,一个或另一个意味着AND检查,两者都意味着OR,但在这种情况下,这是真的.

唯一的另一个问题是,您需要最后运行此验证:如果模型上已经存在其他错误,则会引发异常.说实话,它已经有一段时间了,所以我不记得错误信息是什么,但在你的验证宏中使用这个:

validate :file_dimensions, :unless => "errors.any?"
Run Code Online (Sandbox Code Playgroud)

那应该照顾它!

  • 卫生署!因为我的属性是"图像"而不是"文件" (2认同)