NodeJS:如何保存facebook个人资料图片
我使用express和nodejs,并且在将facebook个人资料图片保存到我的服务器时遇到问题。NodeJS:如何保存facebook个人资料图片
地点图片:http://profile.ak.fbcdn.net/hprofile-ak-ash2/275619_223605264_963427746_n.jpg
脚本中使用:
var http = require('http')
var fs = require('fs')
var options = {
host: 'http://profile.ak.fbcdn.net',
port: 80,
path: '/hprofile-ak-ash2/275619_223605264_963427746_n.jpg'
}
var request = http.get(options, function(res){
res.setEncoding('binary')
var imagedata = ''
res.on('data', function (chunk) {imagedata += chunk})
res.on('end', function(){
fs.writeFile('logo.jpg', imagedata, 'binary', function (err) {
if(err){throw err}
console.log('It\'s saved!');
})
})
})
图像保存,但是是空的。记录图像数据的控制台也是空白的。 I followed this example origionally哪些工作适合我。只需将图片的位置更改为Facebook图片即可打破脚本。
我结束了上来与工作功能:
var http = require('http');
var fs = require('fs');
var url = require('url');
var getImg = function(o, cb){
var port = o.port || 80,
url = url.parse(o.url);
var options = {
host: url.hostname,
port: port,
path: url.pathname
};
http.get(options, function(res) {
console.log("Got response: " + res.statusCode);
res.setEncoding('binary')
var imagedata = ''
res.on('data', function(chunk){
imagedata+= chunk;
});
res.on('end', function(){
fs.writeFile(o.dest, imagedata, 'binary', cb);
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
}
用法:
getImg({
url: "http://UrlToImage.com",
dest: __dirname + '/your/path/to/save/imageName.jpg'
},function(err){
console.log('image saved!')
})
Facebook的API需要重定向到另一个URL的http://graph.facebook.com/:uid/picture。您的代码尝试从第一个网址下载图片,这会导致302图片无法恢复!有没有机会更新这段代码? :-) – Sven
我知道我的答案是有点晚了,但我希望它会帮助别人我们得到这个问题,所以这里是:
将文件保存到您的节点服务器的根目录可以这样做:
var request = require("request");
var fs = require("fs");
var fbUserId = 4;
var imageLink = "https://graph.facebook.com/"+ fbUserId +"/picture?width=500&height=500";
request(imageLink).pipe(fs.createWriteStream("resultIMG.png"))
.on('close', function(){
console.log("saving process is done!");
});
当然,您可以在文件名字符串之前为图像添加所需的任何路径。
如果仍然看到空的图像,请求模块的编码设置为null
,像这样:
var request = require("request").defaults({ encoding: null });
应该这样做。
哪个路径图像将存储在我们的应用程序中,您可以给它详细的过程。 –
如果我明白你问的是什么,就像回答状态一样,你可以在保存的图像名称前添加你希望图像保存的路径作为参数到'createWriteStream'函数,例如:'request(imageLink) .pipe(fs.createWriteStream( “/路径/到/ resultIMG.png”))'。 –
我已经知道了这个想法并且也适用,它的工作正常。 –
该示例图像中发生了什么:p – Mustafa