如何从 Rails Active Storage 中的 url 附加图像

Posted

技术标签:

【中文标题】如何从 Rails Active Storage 中的 url 附加图像【英文标题】:How to attach image from the url in Rails Active Storage 【发布时间】:2020-09-03 07:06:39 【问题描述】:

我想将图像附加到 rake 任务中的记录。我唯一的图像是 URL。这是图片的 URL https://cdn.iconscout.com/icon/free/png-256/google-analytics-7-722699.png。

我在 *** answer 中使用了这种方法。

require 'open-uri'
downloaded_file = open(tool.image)
new_tool.image.attach(io: downloaded_file, filename: "foo.png")

这会产生以下错误。

ActiveStorage::IntegrityError: Unsupported source URL: #<StringIO:0x00007f9bd9759f28>
Caused by:
CloudinaryException: Unsupported source URL: #<StringIO:0x00007f9bd9759f28>

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

在这种情况下,我认为您应该将包含图像 URL 的字符串传递给open

require 'open-uri'

image_url = "https://cdn.iconscout.com/icon/free/png-256/google-analytics-7-722699.png"    
downloaded_file = open(image_url)

new_tool.image.attach(io: downloaded_file, filename: "foo.png")

【讨论】:

感谢您的回复。在我的问题中,tool.image 是图像的 URL。 @SalmanHaseebSheikh 您使用的是什么版本的 Ruby 和 Rails? Ruby 2.7.0 和 Rails 6.0.2。 你确定tool.image返回一个字符串吗?你能把tool.image.class的输出放在这里吗? 最新版本的 ruby​​ 建议使用 URI.open 代替:警告:不推荐通过 Kernel#open 调用 URI.open,直接调用 URI.open 或使用 URI#open

以上是关于如何从 Rails Active Storage 中的 url 附加图像的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails - Active Storage - 如何只接受 pdf 和 doc?

如何使用 Active Storage Rails 上传到具有 AES256 加密(服务器端加密)的 AWS S3 存储桶?

无法使用 sequel-rails gem 安装 rails active_storage

无法加载 Rails.config.active_storage.service

markdown Rails + React build + Active Storage资产

Rails 5.2 Active Storage 添加自定义属性