画像ではないファイルのアップロードに対して後処理を行う必要があります。ペーパークリップではカスタムのポストプロセッサを使用できますが、carrierwaveでこれを行う方法が見つかりません。
Ruby 1.9.3、Rails 3.2.7、CarrierWave0.6.2。
画像ではないファイルのアップロードに対して後処理を行う必要があります。ペーパークリップではカスタムのポストプロセッサを使用できますが、carrierwaveでこれを行う方法が見つかりません。
Ruby 1.9.3、Rails 3.2.7、CarrierWave0.6.2。
OPの質問は、画像ではないファイルを処理する方法でした。
GitHub のソース ファイル: carrierwave/lib/carrierwave/uploader/processing.rbを見 て、コメントを確認してください。
独自の CarrierWave アップローダ サブクラスを作成し、次のようにモデルにマウントします。
def MyModel < ActiveRecord::Base
# this is where the uploaded file will be available in your model,
# as a `MyUploader` instance:
#
mount_uploader :uploaded_file, MyUploader
...
end
ActiveRecord 属性にマウントされていることに注意してください:uploaded_file
。これは:uploaded_file
、モデルからアクセスすると、アップロードされた特定のファイルの CarrierWave アップローダーのインスタンスを取得することを意味します。
次のように、アップローダ内で処理を簡単に定義できます。
class MyUploader < CarrierWave:Uploader::Base
process :my_custom_processing => [param1,param2,param3]
def my_custom_processing(param1,param2,param3)
...
# e.g. you could call a method which is defined elsewhere,
# which operates on a file:
my_nifty_file_processor( self.uploaded_file )
#
# or you could just do this directly:
uploaded_data = self.uploaded_file.read
...
end
end
内部では、渡されたオブジェクトをmy_nifty_file_processor
呼び出すだけで、ファイルを読み取ることができます。read
CarrierWave ではread
、任意の Uploader インスタンス (= アップロードされたファイルの任意のインスタンス) を呼び出すことができ、そのファイルを読み取ります。
もう 1 つのヒント:
ファイルがアップロードされたアップローダ内の ActiveRecord モデルにアクセスする必要がある場合があります。
次のように、アップローダ コード内でアクセスするだけです。
self.model
これにより、アップロードされたファイルに関する追加情報 (形式など) を AR モデルに直接保存できます。
ビデオのサムネイルを作成するためのカスタム ポスト プロセッサの作成方法に関するブログ記事を書きました。
https://prograils.com/posts/video-encoding-processor-for-carrierwave/