使用carrierwave将图像默认图像上传到s3

时间:2014-10-31 20:29:07

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

我们正在使用carrierwave gem在rails项目上传我们的图片。 我们需要在没有图像的情况下支持对象的创建,但是应用程序将在多个平台上运行,并且我们不希望在平台上的每个人都支持没有图像的对象,因此我们希望拥有默认图像。 / p>

所以这是第一个解决方案

class IconUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  def store_dir
    "uploads/#{model.id}"
  end

  def default_url
    "/images/icons/" + [version_name, "default.png"].compact.join('_')
  end

  version :thumbnail do
    process resize_to_fill: [200, 200]
  end

  version :high_resolution do
    process resize_to_fill: [400, 400]
  end
end

这个问题是所有设备都会到服务器(而不是S3)寻找默认图像。 同时它是图像的多个版本的问题。

所以第二个解决方案来了:

class CategoryController < ApplicationController

  ...

  def create
    @category = Category.new(category_params)
    @uploader = IconUploader.new(@category, :icon)
    uploader.cache!(File.open("app/assets/images/photos/picture.jpg"))
    @category.image=@uploader
    @object.save
  end

  ...

end

这解决了多种分辨率的问题,并且它总是转到S3来获取图像。但问题是它会多次复制S3上的默认图像。

我们的第三个解决方案可能是在亚马逊上使用已创建的图像作为默认网址,但它与版本存在同样的问题,因此我们甚至无法实现它。

任何人都可以为这个问题想出更好的解决方案吗?

0 个答案:

没有答案