5

我想下载一张使用carrierwave上传到S3的图片。图像在卡片模型上,作为上传器安装。我看到了这个答案,但无法让该解决方案发挥作用。我的代码是:

#download image from S3
uploader = card.image       #image is the mounted uploader
uploader.retrieve_from_store!(File.basename(card.image.url))
uploader.cache_stored_file!

最后一行抛出:“......导致异常(nil:NilClass的未定义方法'body')......”

我的carrierwave配置如下:

#config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  config.storage = :fog
  config.cache_dir = "#{Rails.root}/tmp/upload"
  ...
end
4

2 回答 2

3

感谢apneadiving。这很简单:

image = MiniMagick::Image::open(card.image.to_s)
image.write(somepath)
于 2013-02-19T05:09:11.437 回答
2

我已经在 Rails 5 中尝试过从 AWS S3 下载文件。

def download
  image = card.image

  # validate existing image from AWS S3
  if image.try(:file).exists?
    data = open(image.url)
    send_data data.read, type: data.content_type, x_sendfile: true
  end

end

希望对大家有所帮助。

于 2017-02-17T07:21:01.143 回答