2011-01-20 3 views
14

Dans notre dernière application, nous devons traiter quelques ajouts, j'ai déjà travaillé avec un trombone et tout fonctionne! mais nous donnons un essai carrierwave, il semble prometteur, mais je ne peux pas trouver comment valider la taille d'une pièce jointe, il semble que le documentation n'a aucune information à ce sujet, devrions-nous l'ajouter manuellement à le modèle via un validateur personnalisé?valider la taille du téléchargement en utilisant Carrierwave

Merci d'avance!

+3

Il semble qu'ils ne l'ont pas (encore) d'ajouter cet validateur personnalisé à mon modèle, => https://gist.github.com/795665 – jpemberthy

+0

je travaillais avec la solution ci-dessus un peu moi même. Sachez simplement que cela ne validera la taille de l'image qu'après son stockage dans le cache. en termes de validation côté client je me regarde toujours –

+0

Si vous voulez sécuriser votre site de télécharger des fichiers ridiculement volumineux, les validations de CarrierWave n'aideront pas, au contraire apprendre [comment sécuriser le serveur] (http://stackoverflow.com/questions/2200188/rails-file-upload-size-limit). Les validations de taille de fichier CarrierWave peuvent être utiles si vous souhaitez définir des limites de taille différentes pour les vidéos et les images ou si vous souhaitez valider la taille de fichier minimale. – skalee

Répondre

20
+5

Cela vérifie après le téléchargement du fichier, ce qui peut poser un problème à ceux qui utilisent Amazon S3. – lulalala

+0

Ouais, je cherche un moyen de valider avant que le fichier ne soit téléchargé. – Raphael

+0

Si vous avez besoin d'une vérification avant le téléchargement, vous pouvez utiliser la gemme [validateurs de fichiers] (https://github.com/musaffa/file_validators). – Musaffa

-1

Here is the solution que je suis venu avec - l'affaire était que je ne pouvais pas vérifier la taille du fichier directement qui a fait la bombe Fog rubygem si le fichier avait pas été téléchargé. Je m'attendrais à ce qu'il y ait une façon plus simple de demander à CarrierWave si un fichier a été téléchargé.

5

J'ai créé une gemme Active Model File Validators qui vérifie le type de contenu et la validation de la taille de fichier pour Carrierwave, PaperClip, Drangonfly, Refile (j'espère que cela fonctionnera avec d'autres solutions de téléchargement). Il détecte le type de contenu en fonction du contenu du fichier et dispose d'un détecteur d'usurpation de type média. Il fonctionne à la fois avant et après les téléchargements.

-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

Depuis 1.0 version CarrierWave a intégré la validation de la taille du fichier.

Installez la dernière carrierwave joyau

gem 'carrierwave', '~> 1.0' 

Ajouter méthode size_range pour fournir une taille min et une taille max

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

Dans le modèle ajouter validates_integrity_of à une taille de fichier valide (et le type de contenu) d'un image.

class Image < ApplicationRecord 
    mount_uploader :image, ImageUploader 

    validates_integrity_of :image 
Questions connexes