我们正在使用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上的默认图像。
我们的第三个解决方案可能是在亚马逊上使用已创建的图像作为默认网址,但它与版本存在同样的问题,因此我们甚至无法实现它。
任何人都可以为这个问题想出更好的解决方案吗?