Ruby on rails 3 在上传之前,对rails中的文件大小进行自定义验证

Ruby on rails 3 在上传之前,对rails中的文件大小进行自定义验证,ruby-on-rails-3,validation,activerecord,Ruby On Rails 3,Validation,Activerecord,在我的表格中,我有 <%= label_tag("file", "Attachment:") %><%= file_field_tag "uploadfile" %> 在我的控制器中,我可以调用这样的东西 validate :validates_uploadfile def validates_uploadfile(file) max_size = 2048 errors.add(:uploadfile, "File size exceeds limi

在我的表格中,我有

<%= label_tag("file", "Attachment:") %><%= file_field_tag "uploadfile" %>
在我的控制器中,我可以调用这样的东西

validate :validates_uploadfile

def validates_uploadfile(file)
    max_size = 2048
    errors.add(:uploadfile, "File size exceeds limitation") if file.size > max_size
end
validates_upload_file(params[:uploadfile])
是否有方法在上传文件之前验证文件上传(而不是使用javascript或查看文件扩展名)
谢谢你的帮助

UPD

validate:uploadfile\u验证,:if=>“uploadfile?”
def上传文件\u验证
错误[:上载文件]1.MB
结束

以下是我的大小验证代码(我用于上传)

validate:picture\u size\u validation,:if=>“picture?”
def图片大小验证
错误[:图片]1.MB
结束
干杯。

您可以使用:

validates_size_of :picture, maximum: 1.megabytes, message: "should be less than 1MB"

如果我没有弄错的话,那么上面所有的方法都会在上传(甚至可能是处理)文件后检查文件大小,但是如果我在文件输入字段中为图片选择一个1GB的文件,考虑到javascript验证不存在或者javascript只是被禁用了,会发生什么呢?它可能会被上传,花了很多时间才告诉你它太大了,这是不对的。我是一个新手,所以我可能在某些方面错了…

您好,我已经编辑了上面的代码,但是我在未定义局部变量或“uploadfile”方法时遇到了一个错误。我没有使用carrierwave或回形针,我正在直接上传到s3。请尝试类似于
“!uploadfile.blank?”
的方式,而不是
“uploadfile?”
-我认为
图片?
是carrierwave定义的一种方法谢谢您的帮助,我终于安装了carrierwave,因为事情没有进展,过了一段时间,我得到了上面的代码片段的工作,再次感谢。这个大小的文件得到检查之前或之后的文件上传?之前上传。我只是现在检查,因为我有疑问,但它工作得很好。这工作,但不是在上传之前。文件将上载到cacheyep,
客户端\u max\u body\u size 5M
@RustamA.Gasanov,以确保安全。如果我绝对不写代码,任何大于5MB的文件都不会上传?@MCB正确,请检查此链接,我不会在web服务器配置文件中添加验证
  validate :picture_size_validation, :if => "picture?"  

  def picture_size_validation
    errors[:picture] << "should be less than 1MB" if picture.size > 1.megabytes
  end
validates_size_of :picture, maximum: 1.megabytes, message: "should be less than 1MB"