如何为Carrierwave分配远程文件?

我有以下定义的video模型:

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

当我上传video文件时。 它还将文件发送到我们的编码服务Zencoder,Zencoder对video文件进行编码并为其创建缩略图。

通常情况下,我可以执行类似@ video.attachment.url的操作,它将返回video文件的路径。 我想用缩略图做同样的事情。 即@ 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的处理,那么将URL存储到模型上的缩略图而不是使用Carrierwave可能更有意义。

这对我有用,CarrierWave 0.5.8

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

当然,您需要将remote_uploader_url设置为attr_accessible

我也在寻找这个。

zencoder情况下的阻塞点是Carrierwave不跟踪原始文件的不同不同文件类型版本。 它只引用原始文件。

因此将原始文件作为.mp4 aa缩略图版本作为.png不起作用。 虽然您可以拥有’image.png’并跟踪’thumb_png_image.png’,但您也无法为同一文件创建’thumb_jpg_image.jpg’。

否则你可以创建一个虚拟版本,并使用条件版本控制告诉CW不要处理它。 由于CW无论如何都会创建虚拟版本但不上传它,您可以让它引用与Zencoder返回的文件匹配的路径。 但是哦,好吧……

在本集结尾(7:35),Ryan Bates在文件表单上传中添加了remote_image_url:

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