2017-07-05 8 views
0

霧でCarrierWaveを使用してS3に画像をアップロードしています。キャリアウェーブと同じ機種のダイナミックストアディレクトリ

私は、さまざまなサイズの画像を表すことができ、それに応じて別のフォルダに保存する必要があるモデル画像を持っています。 minimagickはそれらすべてをカバーすることはできません使用してユースケースとバージョンの任意の数があるかもしれません

'images/large/image.jpg' 
'images/small/image.jpg' 

image.jpgために私はとして保存する必要がある2つの異なるアップロードされたバージョンを持つことができます。例えば

、。

これまでのところ、私は解決策を見つけることができませんでした。誰もこれを行う方法を知っていますか?あなたのケース(reference link

class Image < CarrierWave::Uploader::Base 
storage :file 
    # this if you using use condition for folder location 
    def store_dir 
    if model.somefield == "somecondition 
     "uploads/#{model.somefield}" 
    elsif model.somefield == "somecondition 
     "uploads/location2" 
    else 
     "uploads/default_dir" 
    end 

    end 
    # this is if you want to use version_name 
    def store_dir 
    'images/#{version_name}/' 
    end 
end 

答えて

0

のために、私はこの質問は、私は何を書こうと思います数回に尋ねた見てきましたアップロードしたファイルが置かれる場合だけstore_dirメソッドをオーバーライドし、変更するために

0

:,私の最終的な解決策はです。

モデルでmount_uploaderを定義するのではなく、Uploaderを単独で使い、後でレコードに保存することにしました。

動的に変化store_dirとファイル名

はあなたにも、あなたがコントローラで利用できる持っているものは何でもローカル変数やと名前を定義することができ、このアプローチを使用して、この

uploader = Uploader.new 

uploader.define_singleton_method(:store_dir) do 
    'new_store_dir' 
end 
uploader.define_singleton_method(:filename) do 
    'new_filename' 
end 

uploader.store!(image) 

のように達成することができます。

うまくいけば、他の人にも役立つことを望みます。

+0

イメージごとに異なるディレクトリを用意する必要があるため、version_nameは機能しません。私は3-4の異なる店舗ディレクトリを持つ必要があり、どのファイルフィールドが使用されたかによってどれを保存するかを選択することが可能ですか? – IvanV

+0

store_dirの中で論理を使うことができます – widjajayd

関連する問題