我正在使用express和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 pic即可打破脚本。
答案 0 :(得分:8)
我最终提出了一个有效的功能:
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!')
})
答案 1 :(得分:2)
我知道我的答案有点晚了,但我希望它能帮助其他人解决这个问题,所以这就是:
将文件保存到节点服务器的根目录可以这样做:
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 });
应该这样做。