Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将远程文件分配给Carrierwave?_Ruby On Rails_Amazon S3_Carrierwave - Fatal编程技术网

Ruby on rails 如何将远程文件分配给Carrierwave?

Ruby on rails 如何将远程文件分配给Carrierwave?,ruby-on-rails,amazon-s3,carrierwave,Ruby On Rails,Amazon S3,Carrierwave,我有以下定义的视频模型: class Video require 'carrierwave/orm/activerecord' mount_uploader :attachment, VideoUploader mount_uploader :attachment_thumbnail, VideoThumbnailUploader ... end 当我上传视频文件时。它还将文件发送到我们的编码服务Zencoder,Zencoder对视频文件进行编码并为其创建缩略图 通常,我可以

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

class Video
  require 'carrierwave/orm/activerecord'
  mount_uploader :attachment, VideoUploader
  mount_uploader :attachment_thumbnail, VideoThumbnailUploader
  ...
end
当我上传视频文件时。它还将文件发送到我们的编码服务Zencoder,Zencoder对视频文件进行编码并为其创建缩略图

通常,我可以执行@video.attachment.url之类的操作,这将返回视频文件的路径。我想用缩略图做同样的事情。i、 e.@video.attachment_.url

但是,由于附件是由我们的编码服务创建的,它也会将附件上载到指定的S3存储桶。如何将附件分配到记录的“附件”缩略图列

我能做一些简单的事情吗

@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\u uploader\u url
设置为
attr\u accessible

我也在寻找这个

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

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

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

在本集结尾(7:35),Ryan Bates以文件上传的形式添加了一个远程图像url:


你在看火车票,是吗?;)你以前用过回形针吗?你喜欢哪一个?嗨,罗宾,我试过回形针。我更喜欢Carrierwave。只是个人喜好:-)在这里查看答案。update_列跳过回调,允许您更新属性,而无需CarrierWave重新上载图像。为什么“@video.remote\u attachment\u thumnail\u url”会导致Carrierwave下载并重新处理文件?你只是告诉Carrierwave从那里抓取文件,而不是上传文件。它通常在表单中使用,用户可以输入他们想要上传的图像的URL。ctide,我刚刚尝试:@video.update_attributes(:attachment_thumbnail=>),我得到:CarrierWave::FormNotMultipart:CarrierWave::FormNotMultipart。我猜你不能做@video.remote\u attachment\u thumnail\u url='',这只是一回事。或者我遗漏了什么?这不是同一件事,remote\uUploader\uURL是一个实例方法,它告诉Carrierwave从该url下载文件。请参阅:第87行,它也不是属性,因此无法通过update_attributes进行设置。是否可以仅将远程文件分配给CarrierWave?这意味着它不需要下载或重新处理,只需要分配。这样我就可以利用助手:@video\u attachment\u thumbnail.url