7

画像ではないファイルのアップロードに対して後処理を行う必要があります。ペーパークリップではカスタムのポストプロセッサを使用できますが、carrierwaveでこれを行う方法が見つかりません。

Ruby 1.9.3、Rails 3.2.7、CarrierWave0.6.2。

4

2 に答える 2

8

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 モデルに直接保存できます。

于 2015-01-04T19:06:36.737 に答える
2

ビデオのサムネイルを作成するためのカスタム ポスト プロセッサの作成方法に関するブログ記事を書きました。

https://prograils.com/posts/video-encoding-processor-for-carrierwave/

于 2012-08-10T09:18:59.283 に答える