如何为Carrierwave分配远程文件?

Chr*_*ini 24 ruby-on-rails amazon-s3 carrierwave

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

class Video
  require 'carrierwave/orm/activerecord'
  mount_uploader :attachment, VideoUploader
  mount_uploader :attachment_thumbnail, VideoThumbnailUploader
  ...
end
Run Code Online (Sandbox Code Playgroud)

当我上传视频文件时.它还将文件发送到我们的编码服务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'
)
Run Code Online (Sandbox Code Playgroud)

是否可以将这样的文件分配给Carrierwave?

cti*_*ide 50

您可以执行以下操作:

@video.remote_attachment_thumbnail_url = 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是一回事,remote_ [uploader] _url是一个实例方法,告诉Carrierwave从该URL下载文件.请参阅:https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb第87行此外,它不是属性,因此您无法通过update_attributes进行设置. (5认同)
  • 是否可以仅将远程文件分配给CarrierWave?这意味着不要下载或重新处理,只需分配.所以我可以这样使用帮助器:@ video_attachment_thumbnail.url (2认同)

小智 11

这对我有用,CarrierWave 0.5.8

model.update_attributes(:remote_uploader_url => "http://path/to/image.jpg")
Run Code Online (Sandbox Code Playgroud)

当然,你需要设置remote_uploader_url成为attr_accessible了这一点.