7

Railsアプリで、ユーザーがCarrierwaveを介して画像ファイルまたは非画像ファイルをアップロードできるようにしたいと思います。現在、Carrierwaveは画像ファイルの処理と処理をうまく行っていますが、残念ながら非画像ファイルを完全に削除しています。単一のCarrierwaveアップローダーが画像ファイルと非画像ファイルの両方を処理するためのクリーンな方法はありますか?

現在のアップローダーを以下に含めます。

class AssetUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
   process :resize_to_fill => [300, 300]
  end

  version :icon do
   process :resize_to_fill => [48, 48]
  end

  def extension_white_list
    %w(jpg jpeg gif png pdf doc xls docx xlsx ppt)
  end

end
4

2 に答える 2

2

私はこの正確な問題を抱えていました。ファイル拡張子に基づいて処理するかどうかを動的に決定するトランポリン/サンク メソッドです。

ここで実装を見つけることができます: https://gist.github.com/995663

(バージョンブロックにロジックを導入する単純なアプローチは、CarrierWave DSL の仕組みが原因で実際​​には機能しません - ロジックは呼び出しまで延期する必要があります)

それが役立つことを願っています。

于 2011-05-27T16:56:55.763 に答える
1

これが回答されたことは知っていますが、アーロンの回答は問題を完全には解決しません。のみを呼び出す必要がある場合は、 https://gist.github.com/995663で彼が提案したものを使用できますがprocess、で選択的に処理したい場合は使用できませんversion

バージョンについては、こちらのcarrierwave wiki ページを参照してください: https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Do-conditional-processing

コードでこれを実行できるようになりました。画像のバージョン ブロックのみが処理されます。

version :thumb, :if => :image? do
  process ...
end

protected

def image?(new_file)
  new_file.content_type.include? 'image'
end
于 2011-09-23T17:10:26.697 に答える