【问题标题】:Rails API ActiveStorage: Get Public URL to display image from AWS S3 Bucket?Rails API ActiveStorage:获取公共 URL 以显示来自 AWS S3 存储桶的图像?
【发布时间】:2019-05-14 02:12:45
【问题描述】:

我设置了 Rails 5.2 API,并遵循了有关如何将图像附加到模型对象的文档 - 一切正常。我遇到的问题是我想在 JSON 对象中返回附件的公共 URL,以便我可以在我的 React 前端中使用该 URL 作为 <img src... 中的源。有没有办法从 AWS S3 存储桶返回实际的 URL,如果单击,图像会显示在哪里?

现在,我尝试了rails_blob_pathservice_url,我确实得到了 URL,但它们都没有真正按照我希望的方式呈现图像。有什么解决方法吗?

再次,只需要来自 s3 的附件的实际公共 URL,这样我就可以将其插入到 <img> 内的 src 属性中并显示它。谢谢。

我的 development.rb 文件配置了config.active_stoarge.service = :amazon

我的 storage.yml 文件的 amazon 配置如下: amazon: service: S3 access_key_id: <%= Rails.application.secrets.amazon[:access_key] %> secret_access_key: <%= Rails.application.secrets.amazon[:secret_key] %> region: us-east-2 bucket: my_bucket_name_here

ActiveStorage 5.2.2

Rails 5.2.2

【问题讨论】:

  • service_url 返回什么?
  • 您能否发布您的主动存储配置文件并注意您在哪个环境中看到了这种行为?此外,您使用的是哪个确切版本的 activestorage 和 rails(来自 Gemfile.lock)rails_blob_pathrails_blob_url 在最新的稳定 rails 中都按预期工作
  • 好的,所以我刚刚获得了指向 s3 上图像的直接链接,地址为 service_url。我是否正确假设链接永远不会改变,并且只要它存在就总是指向 s3 上的图像? @LeninRajRajasekaran @Jay Dorsey
  • 我为此找到了另一种可能的解决方案。试试url_for 助手:Rails.application.routes.url_helpers.url_for(object.attachment)

标签: ruby-on-rails reactjs amazon-s3 rails-activestorage


【解决方案1】:

您应该能够使用rails_blob_urlrails_blob_path 创建指向实际文件的链接。

https://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files

【讨论】:

  • 这些都返回我应用程序中图像的相对路径,而不是 S3 图像的外部链接。我想找到一种方法来查看来自 S3 的直接图像 URL。感谢您的帮助!
  • @tman091 这是在本地开发环境吗?还是在已部署的应用程序中?如果您按照在线教程进行操作,您可能已将其配置为使用 service: Disk 进行本地开发,这会将图像存储在本地,而不是在 S3 上。您可以将其交换为使用相同的生产配置(并在本地添加您的环境变量)以使其推送到 S3。如果是生产环境,请确保为您的环境设置配置为 service: s3
  • 这些都是杰伊的优点。它在本地开发环境中,但我将 storage.yml 配置为指向 s3 服务,而不是您提到的 disk。我可以确认一切都在推进到 s3 没有任何问题,所以我知道这是正确设置的。
猜你喜欢
  • 2014-12-23
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 2020-08-21
相关资源
最近更新 更多