2011-01-20 12 views
14

का उपयोग करके अपलोड का आकार सत्यापित करें हमारे नवीनतम एप्लिकेशन में हमें कुछ अपलोड संसाधित करने की आवश्यकता है, मैंने पहले पेपरक्लिप के साथ काम किया है और सबकुछ बस काम करता है! लेकिन हम carrierwave को आज़माकर देख रहे हैं, यह आशाजनक लग रहा है लेकिन, मुझे कोई अटैचमेंट के आकार को सत्यापित करने के लिए नहीं मिल रहा है, ऐसा लगता है कि documentation के बारे में कोई जानकारी नहीं है, क्या हमें इसे मैन्युअल रूप से जोड़ना चाहिए एक कस्टम सत्यापनकर्ता के माध्यम से मॉडल?कैरियरवेव

अग्रिम धन्यवाद!

+3

ऐसा लगता है जैसे वे यह (अभी तक) की जरूरत नहीं है बस मेरे मॉडल, => https://gist.github.com/795665 – jpemberthy

+0

मैं ऊपर समाधान थोड़ा के साथ काम कर रहा था को यह कस्टम सत्यापनकर्ता जोड़ा खुद। बस जागरूक रहें कि कैश में संग्रहीत होने के बाद ही छवि के आकार को मान्य कर दिया जाएगा। क्लाइंट साइड सत्यापन के संदर्भ में मैं अभी भी खुद को देख रहा हूं –

+0

यदि आप अपनी साइट को हास्यास्पद रूप से बड़ी फ़ाइलों को अपलोड करने से सुरक्षित करना चाहते हैं, तो कैरियरवेव सत्यापन मदद नहीं करेगा, इसके बजाय सीखें [सर्वर को कैसे सुरक्षित करें] (http://stackoverflow.com/questions/2200188/रेल-फ़ाइल-अपलोड आकार सीमा नहीं)। यदि आप वीडियो और छवियों के लिए अलग-अलग आकार सीमाएं चाहते हैं या आप न्यूनतम फ़ाइल आकार को मान्य करना चाहते हैं तो कैरियरवेव फ़ाइल आकार सत्यापन उपयोगी हो सकता है। – skalee

उत्तर

20

GitHub पर एक विकी प्रविष्टि नहीं है: https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Validate-attachment-file-size

+5

यह फ़ाइल अपलोड होने के बाद सत्यापित करता है, जो अमेज़ॅन एस 3 का उपयोग करने वालों के लिए एक समस्या हो सकती है। – lulalala

+0

हाँ, मैं फ़ाइल अपलोड होने से पहले मान्य करने के लिए कुछ तरीका ढूंढ रहा हूं। – Raphael

+0

यदि अपलोड करने से पहले आपको सत्यापन की आवश्यकता है, तो आप [फ़ाइल सत्यापनकर्ता] (https://github.com/musaffa/file_validators) मणि का उपयोग कर सकते हैं। – Musaffa

-1

Here is the solution है कि मैं के साथ आया था - चाल था कि मैं फ़ाइल आकार सीधे की जांच नहीं कर सकता है कि के रूप में कोहरा RubyGem बम बना अगर फाइल नहीं था अपलोड किया गया है। मैं उम्मीद करता हूं कि फाइल अपलोड होने पर कैरियरवेव से पूछने के लिए क्लीनर तरीका होगा।

5

मैं एक सक्रिय मॉडल File Validators मणि उस के लिए Carrierwave, पेपर क्लिप, Drangonfly, फिर से प्रस्तुत करने सामग्री प्रकार और फ़ाइल आकार मान्यता की जांच करता है (उम्मीद है कि यह अन्य समाधान अपलोड करने के साथ काम करेंगे) कर दिया है। यह फ़ाइल की सामग्री के आधार पर सामग्री प्रकार का पता लगाता है और इसमें मीडिया प्रकार स्पूफ डिटेक्टर है। यह अपलोड से पहले और बाद में दोनों काम करता है।

-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

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 
संबंधित मुद्दे