Пользовательская проверка размера файла в рельсах перед загрузкой - PullRequest
9 голосов
/ 22 июня 2011

в моей форме у меня есть

<%= 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

Ответы [ 3 ]

16 голосов
/ 22 июня 2011

Вот мой код для проверки размера (я использую CarrierWave для загрузки).

  validate :picture_size_validation, :if => "picture?"  

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

Приветствия.

8 голосов
/ 11 сентября 2013

Вы можете использовать:

validates_size_of :picture, maximum: 1.megabytes, message: "should be less than 1MB"
2 голосов
/ 08 мая 2014

Если я не ошибаюсь, то все перечисленные выше методы проверяют размер файла после его загрузки (и, возможно, даже обработки), но что произойдет, если я выберу 1 ГБ файл в поле ввода файла для изображений, считая, что проверка JavaScript отсутствуетJavaScript просто отключен?Вероятно, он загружается, и уходит много времени только на то, чтобы сказать вам, что он слишком большой, что просто не так.Я новичок, поэтому могу ошибаться ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...