我的应用使用omniaauth和omniauth-facebook gem与facebook连接。我可以下载我需要的所有数据,但是我无法渲染个人资料图片。
我想通过使用pic的URL显示用户的个人资料图片,而不是将其保存到磁盘。
我试过这个:
<%= image_tag "#{@user.facebook.info.image}" %>
以及:
<img src="http://graph.facebook.com/<UID>?fields=picture" >
但两者都没有效果。
我在facebook文档中没有找到任何禁止我使用URL而不是保存到磁盘的内容。我错过了什么吗?
答案 0 :(得分:1)
使用:
<img src="http://graph.facebook.com/<UID>/picture" />
此端点返回301重定向到图片。使用?fields=
返回一个json对象。
答案 1 :(得分:1)
您可以使用提供以下网址格式的Avatars.io服务:
http://avatars.io/facebook/:id
http://avatars.io/facebook/:username
这种方法的一个好处是它也适用于其他服务。
答案 2 :(得分:0)
这是解决方案。我必须利用CURB宝石,我通过this post了解到这一点。
最终,我将此方法放在我的应用程序助手中。
def redirect_location_for(url)
uri_str = URI.encode(url)
result = Curl::Easy.http_get(uri_str) do |curl|
curl.follow_location = false
end
result.header_str.split('Location: ')[1].split(' ')[0]
end
然后我能够在我看来有这个。
<%= image_tag redirect_location_for("https://graph.facebook.com/<nickname>/picture?type=square"), :size => "60x60" %>
请注意,该解决方案要求我使用“https”而不是“http”作为图表网址。这最终将我重定向到与http不同的URL,并且出于某种原因,如果您使用HTTPS提取图片,Facebook不会限制您下载和渲染图片的方式。