我尝试将Active Storage与Amazon Web Services结合使用,而不是Carrierwave和Cloudinary。
使用Carrierwave,我有一些功能可以在通过UploaderController上传之前调整图像的大小。
但是如何使用Active Storage做到这一点?
我尝试这个:
宝石文件:
gem 'aws-sdk-s3', require: false
gem 'image_processing', '~> 1.2'
gem 'mini_magick', '~>4.9'
item.rb
class Item < ApplicationRecord
has_one_attached :photo
end
我认为自己有一个表单:
<%= f.input :photo, input_html: { accept: ('image') } %>
我把这个物体当作照片:
#<ActiveStorage::Attached::One:0x00005641d296e1b8 @name="photo", @record=#<Item id: nil, name: "test0941", verbe: "To Lend", collection_id: nil, created_at: nil, updated_at: nil, price_cents: 0, description: "", category_id: 78, photo: nil>, @dependent=:purge_later>
在我的控制器中:
@item = Item.new(item_params)
@item.photo.combine_options do |b|
b.resize "250x200>"
end
使用MiniMagick gem的方法无法调整照片的大小。
有人有这样做的想法吗?
感谢您的帮助, 锡伯特
答案 0 :(得分:0)
如果params [:item] [:photo]是您帖子中的参数,则可以添加
image = MiniMagick::Image.new(params[:item][:photo].tempfile.path)
image.resize "250x200>"
答案 1 :(得分:0)
活动存储可以解决您的问题。 您不需要在控制器中调整图像大小,您可以将其用作 视图文件中的item.photo.variant(resize:'100x100')。 Active Storage将创建新的变体映像,例如魔术。
https://edgeguides.rubyonrails.org/active_storage_overview.html