"OpenURI::HTTPError: 401 Unauthorized" with Rails, HTTParty, and Paperclip

"OpenURI::HTTPError: 401 Unauthorized" with Rails, HTTParty, and Paperclip

我正在使用 HTTParty 从 Eventbrite API 获取数据。

response = HTTParty.get("https://www.eventbriteapi.com/v3/events/search?token=#{Figaro.env.eventbrite_oauth_token}")   

我正在尝试将事件附件保存到我的对象中。 (我正在使用回形针上传图片)。

@event.image = "https://img.evbuc.com/http%3A%2F%2Fcdn.evbuc.com%2Fimages%2F18699100%2F162201087004%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C194%2C2000%2C1000&s=67649c6c8e7ef66e409189bf08474203"

但是我得到错误:

"OpenURI::HTTPError: 401 Unauthorized" with Rails, HTTParty, and Paperclip."

关于如何解决的任何想法?

我注意到在较新版本的 Paperclip 中,当要求 Paperclip 通过 URL 导入资产时,我需要将任何 URL 字符串包装在 URI.parse 中。

所以对于你的例子:

@event.image = URI.parse("https://img.evbuc.com/http%3A%2F%2Fcdn.evbuc.com%2Fimages%2F18699100%2F162201087004%2F1%2Foriginal.jpg?h=200&w=450&rect=0%2C194%2C2000%2C1000&s=67649c6c8e7ef66e409189bf08474203")

我查看了 Paperclip 代码以了解为什么将 URL 包装在 URI.parse 中有效。

事实证明,Paperclip 使用不同的适配器 类 来处理不同的目标。

您的附件首先失败的原因是 a recent change 在处理 URL 的 HttpUrlProxyAdapter 中的 URL 处理。 此更改阻止附加具有 URL 已编码的文件。

用 URI.parse 包装 URL 确保您的附件由 URI 适配器处理。