25

我有具有以下定义的视频模型:

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?

4

4 回答 4

50

您可以执行以下操作:

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

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

于 2011-02-15T18:13:00.290 回答
11

这对我有用,使用 CarrierWave 0.5.8

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

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

于 2012-07-03T04:51:38.310 回答
0

我也在找这个。

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

因此,将原始文件作为 .mp4 aa 缩略图版本作为 .png 是行不通的。虽然您可以拥有“image.png”并跟踪“thumb_png_image.png”,但您不能同时为同一个文件创建“thumb_jpg_image.jpg”。

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

于 2012-07-27T05:47:02.697 回答
0

在本集结束时(7:35),Ryan Bates 在文件形式上传中添加了一个 remote_image_url:

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

于 2013-04-26T09:18:05.917 回答