2011-01-20 13 views
14

En nuestra última aplicación tenemos que procesar algunas cargas, he trabajado antes con clip y ¡todo funciona! pero estamos dando carrierwave una prueba, parece prometedor, pero no puedo encontrar cómo validar el tamaño de un archivo adjunto, parece que el documentation no tiene ninguna información al respecto, debemos agregarlo manualmente a el modelo a través de un validador personalizado?valida el tamaño de la carga usando Carrierwave

¡Gracias de antemano!

+3

Parece como si no lo tienen (aún) Acaba de añadir este validador personalizado a mi modelo, => https://gist.github.com/795665 – jpemberthy

+0

yo estaba trabajando con la solución anterior un poco mí mismo. Solo tenga en cuenta que eso solo validará el tamaño de la imagen después de que haya sido almacenada en la caché. en términos de validación del lado del cliente, todavía me miro a mí mismo –

+0

Si desea evitar que su sitio cargue archivos ridículamente grandes, las validaciones de CarrierWave no ayudarán, sino que aprenderán cómo proteger el servidor (http://stackoverflow.com/questions)./2200188/rails-file-upload-size-limit). Las validaciones de tamaño de archivo de CarrierWave pueden ser útiles si desea tener diferentes límites de tamaño para videos e imágenes o si desea validar el tamaño mínimo de archivo. – skalee

Respuesta

20
+5

Esto se verifica después de cargar el archivo, lo que puede ser un problema para quienes usan Amazon S3. – lulalala

+0

Sí, estoy buscando alguna forma de validar antes de que se cargue el archivo. – Raphael

+0

Si necesita verificación antes de cargarla, puede usar la validad [validadores de archivos] (https://github.com/musaffa/file_validators). – Musaffa

-1

Here is the solution que se me ocurrió - el truco era que no podía comprobar el tamaño del archivo directamente como que hizo la bomba Niebla rubygem si el archivo no tenía sido subido Esperaría que haya una manera más limpia de preguntarle a CarrierWave si se cargó un archivo.

5

He hecho una joya del Modelo Activo File Validators que comprueba el tipo de contenido y la validación del tamaño de archivo para Carrierwave, PaperClip, Drangonfly, Refile (con suerte funcionará con otras soluciones de carga). Detecta el tipo de contenido basado en el contenido del archivo y tiene un detector de falsificación de tipo de medios. Funciona tanto antes como después de las cargas.

-1
taken from https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Validate-attachment-file-size 

You can use a Rails custom validator to verify your attachment meets specific file size requirements. 

Grab a copy of the validator from https://gist.github.com/1009861 and save it to your lib/ folder as file_size_validator.rb. Add the error translations to config/locales/en.yml or wherever is appropriate for your setup. Then do this in your parent model: 

# app/models/brand.rb 
require 'file_size_validator' 
class Brand < ActiveRecord::Base 
    mount_uploader :logo, BrandLogoUploader 
    validates :logo, 
    :presence => true, 
    :file_size => { 
     :maximum => 0.5.megabytes.to_i 
    } 
end 

Like validates_length_of, validates_file_size accepts :maximum, :minimum, :in [range], and :is options. 

A custom validator could also be used like this. 

# app/models/user.rb 
class User< ActiveRecord::Base 
    attr_accessible :product_upload_limit 
    has_many :products 
end 

# app/models/brand.rb 
class Product < ActiveRecord::Base 
    mount_uploader :file, FileUploader 
    belongs_to :user 
    validate :file_size 

    def file_size 
    if file.file.size.to_f/(1000*1000) > user.product_upload_limit.to_f 
     errors.add(:file, "You cannot upload a file greater than #{upload_limit.to_f}MB") 
    end 
    end 
end 

Here, the upload limit varies from user to user & is saved in the user model. 

other link : 

http://stevenyue.com/2013/04/03/validate-attachment-file-size-and-type-in-rails/ 
https://richonrails.com/articles/getting-started-with-paperclip 
https://gist.github.com/chrisbloom7/1009861 
4

Desde la versión 1.0 CarrierWave ha incorporado en la validación del tamaño del archivo.

Instalar última carrierwave joya

gem 'carrierwave', '~> 1.0' 

método Add size_range para proporcionar un tamaño mínimo y un tamaño máximo

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

En el modelo añadir validates_integrity_of a un tamaño válido archivo (y tipo de contenido) de una imagen.

class Image < ApplicationRecord 
    mount_uploader :image, ImageUploader 

    validates_integrity_of :image 
Cuestiones relacionadas