次の定義のビデオモデルがあります。
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に割り当てることはできますか?
次のことができます。
@video.remote_attachment_thumbnail_url = 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
ただし、これにより、Carrierwaveはファイルを単にサムネイルにするのではなく、ダウンロードして再処理します。 Carrierwaveの処理を使用しない場合は、Carrierwaveを使用するよりも、モデルのサムネイルへのURLを保存する方が理にかなっている可能性があります。
CarrierWave 0.5.8でこれは私のために働いた
model.update_attributes(:remote_uploader_url => "http://path/to/image.jpg")
もちろん、remote_uploader_url
することが attr_accessible
このため。
これも探していました。
Zencoderケースのブロッキングポイントは、Carrierwaveが元のファイルの異なる異なるファイルタイプバージョンを追跡しないことです。元のファイルのみを参照します。
したがって、元のファイルを.mp4として、サムネイルバージョンを.pngとして持つことはできません。 「image.png」を作成し、「thumb_png_image.png」を追跡することもできますが、同じファイルに「thumb_jpg_image.jpg」を作成することもできません。
それ以外の場合は、ダミーバージョンを作成し、条件付きバージョニングを使用してCWに処理しないように指示できます。とにかくCWはダミーバージョンを作成しますが、アップロードしないため、Zencoderから返されたファイルと一致するパスを参照させることができます。でもまあ...
このエピソードの終わり(7:35)に、Ryan Batesがファイルフォームアップロードにremote_image_urlを追加します。