4

複数のファイル タイプに対して単一のアップローダを使用する場合に、アップロードされたファイルの拡張子を検証する方法は?

属性ファイルを含むアセットという単一のモデルを使用しています。アップローダはファイル属性に実装されています。feature_id というもう 1 つの属性を持つアセット モデル。feature_id は、ビデオ、オーディオなどの機能を指します。

では、feature_id の値に応じて、複数の拡張子のホワイトリストを使用してファイルの種類を検証するにはどうすればよいでしょうか?

ruby 1.9 と rails 3.2.11 を使う

どんな助けでも大歓迎です。

4

3 に答える 3

6

答えは受け入れられましたが、これにはもっと良い方法があります。このコードを試してください。

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
    if model.feature_id == 1
      %w(jpg jpeg gif png)
    elsif model.feature_id == 2
      %w(pdf doc docx xls xlsx)
    elsif model.feature_id == 3
      %w(mp3 wav wma ogg)
    end
  end
end

feature_id == 1は、画像のアップロードfeature_id == 2のみを許可することを意味し、ドキュメントのみのアップロードを許可しfeature_id == 3、音声ファイルのみのアップロードを許可することを意味します。

うまくいけば、それは質問に答えます。他の種類のファイルに対してさらにチェックを追加できます。

于 2013-05-28T12:51:14.663 に答える
5

キャリアウェーブのドキュメントに示されているように、アップローダでホワイト リストを定義します。

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
    %w(jpg jpeg gif png)
  end
end
于 2013-02-15T00:18:10.613 に答える
2

私はまったく同じユースケースに遭遇しました:

Asset.rb でファイル名の形式を検証します

validates :asset_file,
                 format:{
                    with: %r{\.(pdf|doc|png)$}i, message: "Wrong file format"
                        }

正規表現を使用してファイル名をテストします。

ここで正規表現を試すことができます: http://rubular.com/r/Z3roRDDXAf

お役に立てれば!

于 2013-02-10T20:06:14.743 に答える