【问题标题】:Rails ActiveStorage - Uploaded image throws error 400 after 5 minutesRails ActiveStorage - 上传的图像在 5 分钟后抛出错误 400
【发布时间】:2019-03-14 19:43:40
【问题描述】:

所以我听说过很多关于 Rails 5.2 和 ActiveStorage 的事,也有很多人谈论 ActiveStorage 是 rails 中图像处理的替代品。

我的问题是,我已经设置并升级了我的应用程序。我上传了一张图片,它会进入我的 Google Cloud 存储桶,这一切都很好。

问题是,在我看来,我尝试过类似的东西:

   <%= image_tag((current_user.avatar), size: "100x100") %>

<%= image_tag(rails_blob_path(current_user.avatar, disposition: "attachment"), size: "100x100") %>

这些将显示上传的图像大约 5 分钟,然后从我的视野中消失。如果我检查,它会显示错误 400。我该如何解决这个问题? 我希望我的用户头像永久显示,而不是消失。

请就如何解决这个问题提出建议、搜索和阅读数小时。

编辑:执行“在新选项卡中打开图像”会导致此 XML 错误

<Error>
<Code>ExpiredToken</Code>
<Message>The provided token has expired.</Message>
<Details>
Request signature expired at: 2018-10-09T20:50:09+00:00
</Details>
</Error>

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    图片网址的默认有效期为 5 分钟 (https://guides.rubyonrails.org/active_storage_overview.html#linking-to-files)

    您可能可以在您的活动存储配置中为谷歌云服务设置一个新密钥 url_expires_in

    【讨论】:

    • 如果你使用 service_url,这完全可以避免,对吧?
    • 我怀疑它是否会有所帮助,因为它也会使用相同的超时时间,而且不建议直接使用,请参阅此处的文档:github.com/rails/rails/blob/5-2-stable/activestorage/app/models/…
    • 图片还没有过期..那么这是一个错误吗?
    • 为你生成的图片url,是指向你的应用还是指向谷歌云?
    • 这很奇怪,我将不得不深入挖掘,看看它是如何绕过过期标志的
    【解决方案2】:

    诀窍是使用 service_url 将图像持久保存在应用程序视图中。

    例如:&lt;%= image_tag(@user.avatar.service_url) %&gt;

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2018-08-27
      • 1970-01-01
      • 2020-05-24
      • 2018-12-26
      • 2015-02-23
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      相关资源
      最近更新 更多