如何使用Carrierwave下载和存储远程图像URL

时间:2016-01-23 22:23:57

标签: ruby-on-rails image amazon-s3 carrierwave

道歉,如果这个问题有明显的答案,我对铁轨有点生疏。

一些背景:我正在构建一个Rails API,应该抓取食谱,存储它们,并将它们提供给我的前端Ember应用程序。到目前为止,一切似乎都很好,除了我一直卡在图像上。由于这些图像非常大,我想下载图像并处理它们,然后将它们上传到S3。为了实现这一点,我认为carrierwave可能会做到这一点,但我似乎无法提供远程URL。这是我到目前为止的地方:

#image.rb
class Image < ActiveRecord::Base
mount_uploader :photos, PhotoUploader

belongs_to :imageable, polymorphic: true
end
#recipe.rb
class Recipe < ActiveRecord::Base
belongs_to :blog
has_many :images, as: :imageable
has_and_belongs_to_many :ingredients
end
class PhotoUploader < CarrierWave::Uploader::Base
...

在我的rails控制台中,我可以执行

之类的操作
  

Recipe.first.images =&gt; []

但我无法使用图片网址从我的控制台填充图像数组。如何提供carrierwave远程图像URL并将其存储在S3上?

1 个答案:

答案 0 :(得分:2)

您可以将值传递给远程字段名称。

在您的示例中,它将是remote_photos_url

因此,当您创建新图像时,代码将如下所示:

Image.new remote_photos_url: 'http://www.domain.com/path-to-image', recipe_id: n

Here is a link to the docs

然后,只要您的S3已经设置并且您的CarrierWave上传已经设置,它就会按照您想要的方式运行。