当用户通过Facebook登录时,我想使用Facebook个人资料图片作为我网站的个人资料图片。我正在使用omniauth gem进行Facebook登录。登录后,omniauth以Hash的形式给出了Facebook响应,如下所示:
{
"user_info" => {
"last_name" => "..........",
"image" => "http://graph.facebook.com/100002356868026/picture?type=square",
"first_name" => "........",
"email" => "xxxxx@xxx.xxx"
},
"uid" => "..........."
}
在这里,我可以使用request.omniauth["user_info"]["image"]
访问图片网址,并可以使用
require 'open-uri'
image_url = request.omniauth["user_info"]["image"]
image_data = open(image_url).read
File.open("image.png", "wb") { |file| file << image_data }
我想从网址获取图片名称。但是,Facebook网址不包含名称(这是一个重定向到其网址包含图片名称的另一个网页的链接)。如何从网址解析图像名称?
答案 0 :(得分:1)
我认为您无法从网址获取最终图片名称。图像存储在内容传送网络(CDN)中,该网络不是通过facebook id传送图像,而是通过其他索引传送图像。
为什么你还想要最终的图像名称呢?您可以按照所引用的图像参数获取图像,它将直接返回用户的图像数据(如果可用,否则返回虚拟图像)。
如果您想将图像存储在服务器上,您很可能会选择自己的命名方案。
重要提示:请仔细检查Facebook开发者条款!在服务器上存储用户图像可能违反这些条款。
我建议不要在您的服务器上处理图像,只要在html图像标记中包含图像参数,如果可能的话。