проверить размер загрузки с помощью Carrierwave

В нашем последнем приложении нам нужно обработать некоторые загрузки, я раньше работал со скрепкой, и все просто работает! но мы пробуем carrierwave, это выглядит многообещающе, но я не могу найти как проверить размер вложение, похоже, что в документации нет информации о нем, если мы добавим его вручную в модель через кастомный валидатор?

Заранее спасибо!


person jpemberthy    schedule 20.01.2011    source источник
comment
Похоже, у них его нет (пока). Просто добавили этот пользовательский валидатор в мою модель = ›gist.github .com / 795665   -  person jpemberthy    schedule 26.01.2011
comment
Я сам немного работал с вышеуказанным решением. просто имейте в виду, что это будет подтверждать размер изображения только после того, как оно было сохранено в кеше. с точки зрения проверки на стороне клиента я все еще ищу себя   -  person Will Ayd    schedule 08.03.2011
comment
Если вы хотите защитить свой сайт от загрузки слишком больших файлов, проверки CarrierWave не помогут, вместо этого изучите как защитить сервер. Проверка размера файла CarrierWave может быть полезна, если вы хотите иметь разные ограничения размера для видео и изображений или хотите проверить минимальный размер файла.   -  person skalee    schedule 03.06.2012


Ответы (4)


В github есть запись в Wiki: https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Validate-attachment-file-size

person Flov    schedule 09.06.2011
comment
Это проверяется после загрузки файла, что может быть проблемой для тех, кто использует Amazon S3. - person lulalala; 06.08.2013
comment
Да, я ищу способ проверить перед загрузкой файла. - person Raphael; 22.10.2013
comment
Если вам нужна проверка перед загрузкой, вы можете использовать гем валидаторы файлов. - person Musaffa; 12.12.2014

Я сделал активную модель File Validators, которая проверяет тип содержимого и размер файла для проверки Carrierwave, PaperClip, Drangonfly, Refile (надеюсь, он будет работать с другими решениями для загрузки). Он определяет тип содержимого на основе содержимого файла и имеет детектор подделки типа мультимедиа. Работает как до, так и после загрузки.

person Musaffa    schedule 11.12.2014

Начиная с версии 1.0 CarrierWave имеет встроенную проверку размера файла.

Установите последний carrierwave драгоценный камень

gem 'carrierwave', '~> 1.0'

Добавьте метод size_range, чтобы указать минимальный и максимальный размер

class ImageUploader < CarrierWave::Uploader::Base
  def size_range
    0..2.megabytes
  end

В модели добавьте validates_integrity_of для проверки размера файла (и типа содержимого) изображения.

class Image < ApplicationRecord
  mount_uploader :image, ImageUploader

  validates_integrity_of :image
person Alex Kojin    schedule 13.01.2017

Вот решение, которое я придумал - уловка заключалась в том, что я не мог проверить файл size прямо так, как это сделало бы Fog RubyGem бомбой, если бы файл не был загружен. Я ожидал, что появится более чистый способ спросить CarrierWave, загружен ли файл.

person Peter Marklund    schedule 07.03.2014