【问题标题】:Custom validation for file size in rails before being uploaded上传之前在 Rails 中自定义文件大小验证
【发布时间】:2011-06-22 13:48:21
【问题描述】:

在我的表单中

<%= 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_validation, :if => "uploadfile?"

def uploadfile_validation
    errors[:uploadfile] << "should be less than 1MB" if uploadfile.size > 1.megabytes
end

【问题讨论】:

    标签: ruby-on-rails-3 validation activerecord


    【解决方案1】:

    这是我的尺寸验证代码(我使用CarrierWave 进行上传)。

      validate :picture_size_validation, :if => "picture?"  
    
      def picture_size_validation
        errors[:picture] << "should be less than 1MB" if picture.size > 1.megabytes
      end
    

    干杯。

    【讨论】:

    • 嗨,我已经编辑了上面的代码,但是我得到一个错误未定义的局部变量或方法`uploadfile',任何想法。我没有使用carrierwave或回形针,我直接上传到s3。
    • 尝试类似"!uploadfile.blank?" 而不是"uploadfile?" - 我认为picture? 是CarrierWave 定义的一种方法
    • 感谢您的帮助,我终于安装了carrierwave,因为事情不正常,过了一段时间我让上面的代码sn-p工作了,再次感谢。
    • 文件的这个大小是在文件上传之前还是之后检查的?
    • 上传前。我刚刚检查了一下,因为我有疑问,但它工作正常。
    【解决方案2】:

    你可以使用:

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

    【讨论】:

    • 这可行,但在上传之前不行。文件将被上传到缓存中
    【解决方案3】:

    如果我没记错的话,上面的所有方法都会在文件上传后检查文件大小(甚至可能已处理),但是如果考虑到 javascript 验证不存在或javascript刚刚被禁用?它可能会被上传,花了很多时间告诉你它太大了,那是不对的。我是新手,所以我可能对某些事情有误...

    【讨论】:

    • 是的,client_max_body_size 5M
    • @RustamA.Gasanov 所以,只是为了确保。如果我完全不编写任何代码,任何大于 5 MB 的文件都不会上传?
    • @MCB 正确,检查此链接nginx.org/en/docs/http/…
    • 我不会在 Web 服务器配置文件中添加验证
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多