2011-01-20 1 views
14

最新のアプリケーションではアップロードを処理する必要があります。以前はクリップで作業していましたが、すべて機能しています。私たちはcarrierwaveを試してみると有望に見えますが、私は見つけることができませんのサイズを検証する方法は、documentationには何の情報もありません。カスタムバリデータを使用したモデルですか?Carrierwaveを使用してアップロードのサイズを確認

ありがとうございます!

+3

それはちょうど私が上記の溶液ビットで働いていた私のモデル、=> https://gist.github.com/795665 – jpemberthy

+0

にこのカスタムバリデータを追加したようです私自身。それがキャッシュに保存された後のイメージのサイズの検証のみを行うことに注意してください。私はまだ自分自身を見ているクライアント側の妥当性の面で –

+0

あなたのサイトが巨大なファイルをアップロードすることからあなたのサイトを保護したい場合は、代わりに[サーバーを保護する方法](http://stackoverflow.com/questions)を習得するCarrierWaveの検証は役に立ちません/ 2200188/rails-file-upload-size-limit)。 CarrierWaveのファイルサイズの検証は、ビデオや画像のサイズ制限が異なる場合や、最小ファイルサイズを検証する場合に便利です。 – skalee

答えて

20

githubの上のWikiエントリがあります:私が思いついたhttps://github.com/jnicklas/carrierwave/wiki/How-to%3A-Validate-attachment-file-size

+5

これは、ファイルがアップロードされたことを確認します。これは、Amazon S3を使用しているユーザーにとって問題となります。 – lulalala

+0

ええ、私はファイルがアップロードされる前に検証する方法を探しています。 – Raphael

+0

アップロード前に確認が必要な場合は、[ファイルバリデータ](https://github.com/musaffa/file_validators)gemを使用できます。 – Musaffa

-1

Here is the solution - それは霧RubyGem爆弾を作ったとして、ファイルがなかった場合のトリックは、私が直接ファイルサイズを確認することができなかったということでしたアップロードされました。私はファイルがアップロードされた場合CarrierWaveに尋ねるクリーンな方法があることを期待しています。

5

私は、Carrierwave、PaperClip、Drangonfly、Refileのコンテンツタイプとファイルサイズの確認をチェックするアクティブモデルFile Validators gemを作っています(これはうまくいけば他のアップロードソリューションでもうまくいきます)。ファイルの内容に基づいてコンテンツタイプを検出し、メディアタイプのなりすまし検出器を備えています。アップロード前とアップロード後の両方で動作します。

-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' 

分のサイズとモデルで

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

はの有効なファイルサイズ(およびコンテンツタイプ)にvalidates_integrity_ofを追加し、最大サイズを提供するために、Addメソッドsize_range画像。彼らは(まだ)それを持っていないよう

class Image < ApplicationRecord 
    mount_uploader :image, ImageUploader 

    validates_integrity_of :image 
関連する問題