NodeJS:如何保存Facebook个人资料图片

时间:2011-09-27 11:35:02

标签: node.js express

我正在使用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即可打破脚本。

2 个答案:

答案 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 });

应该这样做。