web-dev-qa-db-ja.com

Carrierwaveにリモートファイルを割り当てる方法は?

次の定義のビデオモデルがあります。

class Video
  require 'carrierwave/orm/activerecord'
  mount_uploader :attachment, VideoUploader
  mount_uploader :attachment_thumbnail, VideoThumbnailUploader
  ...
end

動画ファイルをアップロードしたとき。また、ファイルをエンコードサービスZencoderに送信し、Zencoderはビデオファイルをエンコードしてサムネイルを作成します。

通常、ビデオファイルのパスを返す@ video.attachment.urlなどを実行できます。サムネイルでも同じことをしたいのですが。つまり、@ video.attachment_thumbnail.url

ただし、添付ファイルはエンコードサービスによって作成されるため、指定されたS3バケットにもアップロードされます。レコードのattachment_thumbnail列に添付ファイルを割り当てるにはどうすればよいですか?

私は単に次のようなことをすることができますか?

@video.update_attributes(
  :attachment_thumbnail => 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
)

このようなファイルをCarrierwaveに割り当てることはできますか?

24

次のことができます。

@video.remote_attachment_thumbnail_url = 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'

ただし、これにより、Carrierwaveはファイルを単にサムネイルにするのではなく、ダウンロードして再処理します。 Carrierwaveの処理を使用しない場合は、Carrierwaveを使用するよりも、モデルのサムネイルへのURLを保存する方が理にかなっている可能性があります。

50
ctide

CarrierWave 0.5.8でこれは私のために働いた

model.update_attributes(:remote_uploader_url => "http://path/to/image.jpg")

もちろん、remote_uploader_url することが attr_accessible このため。

11
asif

これも探していました。

Zencoderケースのブロッキングポイントは、Carrierwaveが元のファイルの異なる異なるファイルタイプバージョンを追跡しないことです。元のファイルのみを参照します。

したがって、元のファイルを.mp4として、サムネイルバージョンを.pngとして持つことはできません。 「image.png」を作成し、「thumb_png_image.png」を追跡することもできますが、同じファイルに「thumb_jpg_image.jpg」を作成することもできません。

それ以外の場合は、ダミーバージョンを作成し、条件付きバージョニングを使用してCWに処理しないように指示できます。とにかくCWはダミーバージョンを作成しますが、アップロードしないため、Zencoderから返されたファイルと一致するパスを参照させることができます。でもまあ...

0
tomek

このエピソードの終わり(7:35)に、Ryan Batesがファイルフォームアップロードにremote_image_urlを追加します。

http://railscasts.com/episodes/253-carrierwave-file-uploads

0