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

wil*_*age 3 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!');
        })
      })
    })
Run Code Online (Sandbox Code Playgroud)

图像保存但是为空.记录图像数据的控制台也是空白的.我从原始的例子开始,这对我有用.只需将图像的位置更改为facebook pic就会破坏脚本.

wil*_*age 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

用法:

    getImg({
        url: "http://UrlToImage.com",
        dest: __dirname + '/your/path/to/save/imageName.jpg'
    },function(err){
        console.log('image saved!')
    })
Run Code Online (Sandbox Code Playgroud)


Or *_* A. 5

我知道我的回答有点晚了,但我希望它能帮助其他人解决这个问题,所以这里是:

可以通过以下方式将文件保存到 Node 服务器的根目录:

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!");
    });
Run Code Online (Sandbox Code Playgroud)

当然,您可以在文件名字符串之前添加图像的任何路径。

如果您仍然看到空图像,请将请求模块的编码设置为null,如下所示:

var request = require("request").defaults({ encoding: null });
Run Code Online (Sandbox Code Playgroud)

应该可以做到这一点。