【问题标题】:Rails api active_storageRails api active_storage
【发布时间】:2018-11-01 01:17:45
【问题描述】:

有没有办法在上传时创建图像的变体并存储变体而不是整个图像。

例如。用户上传了一张 1000x1000 的图片,当我在 rails 中收到上传的图片时,我想创建 3 个变体,一个 100x100、一个 300x300 和一个 600x600,并将它们存储在 S3 中,然后能够通过执行类似post.image.thumbnail 的操作来检索它们

每次请求图像时我都必须从 s3 检索全尺寸图像并即时处理它以将其提供给用户,这似乎很愚蠢。

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    我想你正在寻找 minimagick

    将此添加到您的 gemfile 中

    gem 'mini_magick'
    

    然后你可以使用 minimagick 方法来转换图像

    <%= image_tag user.avatar.variant(resize: "100x100") %>
    

    here is the documentation for this

    【讨论】:

    • 我正在使用 minimagic,但它仍会上传原始文件,然后在请求时对其进行处理以调整大小。我想在将它存储到 S3 之前调整它的大小。所以我可以上传一张图片,并在 s3 中存储一个 100x100 的拇指和一个 600x600 的图片。所以我不必在每次请求时都处理它。
    • 您不必每次都处理它。如果我没记错的话,第一次请求时,它会创建文件,第二次时,它只是请求之前创建的文件。
    • 但是那个文件不会过期吗?还是只是过期的网址?
    • 只是url,你需要调用之前处理的,创建变体并上传到服务,然后当你像上面那样调用它时,它只会要求url。在这里阅读变体的文档以更清楚地了解它。 api.rubyonrails.org/classes/ActiveStorage/Variant.html
    • 伙计,你帮了大忙。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2018-11-19
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多