如何在使用Active Storage上传(与AWS链接)之前调整图像大小

时间:2018-12-17 08:50:34

标签: amazon-s3 rails-activestorage minimagick

我尝试将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的方法无法调整照片的大小。

有人有这样做的想法吗?

感谢您的帮助, 锡伯特

2 个答案:

答案 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