2011-02-15 17 views
24

我有如下定义视频模式:如何将远程文件分配给Carrierwave?

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

当我上传的视频文件。它还将文件发送到我们的编码服务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?

+0

你看railscasts,不是吗? ;)你之前使用过回形针吗?你更倾向哪个? – Robin 2011-02-15 18:15:13

+1

嗨罗宾,试过回形针。我更喜欢Carrierwave。只是个人喜好:-) – 2011-02-15 18:28:05

回答

49

你可以做到以下几点:

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

但是,这会导致Carrierwave下载+重新处理的文件,而不是只让缩略图。如果您不打算使用Carrierwave的处理,那么只需将模型中的URL存储到模型的缩略图上,而不是使用Carrierwave就可能更有意义。

11

这个工作对我来说,与CarrierWave 0.5.8

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

当然,你需要设置remote_uploader_urlattr_accessible这一点。

0

我也在寻找这个。

zencoder案例中的阻塞点是Carrierwave不会跟踪原始文件的不同文件类型版本。它只引用原始文件。

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

否则,您可以创建一个虚拟版本并使用条件版本控制告诉CW不处理它。 由于CW会创建虚拟版本,但不会上传它,所以您可以让它引用与Zencoder返回的文件相匹配的路径。但哦...