使用curl和node.js下载图像并将其转换为base64

时间:2013-12-10 20:27:10

标签: node.js curl express base64

我需要从外部服务器下载图像并动态地将其推送给我的客户端。

外部服务器正在使用SSL和基本身份验证。在花了好几个小时试图使用'request'和'restler'模块之后,我放弃并选择'curlrequest'模块,这个模块运行正常。

我的问题是curl下载的二进制图像数据不会转换为可读的base64图像。我想可能会有一些卷曲的旗帜,但我不确定。任何帮助表示赞赏。

var curl = require('curlrequest');

exports.slideImageData = function (req, res){
  var id = req.params.id;
  var prefix = "data:image/png;base64, ";
  var options = {
    url: config.jive.domain + 'api/core/v3/people/' + id + '/images/1/data'
    , user: config.jive.user + ':' + config.jive.pass
  };
  curl.request(options, function (err, result){
    if (err){
      console.log(err)
    } else{
      var base64Image = new Buffer(result, 'binary').toString('base64');
      base64Image = prefix + base64Image;
      res.send('<img src="' + base64Image + '"/>');
    }
  });
}

要添加更多上下文,以下是客户端中的图像。 base64编码已被故意用省略号截断。

<img src="data:image/png;base64, /VBORw0KGgoAAAANSUh ... AAAABJRU5E/UJg/Q==">

2 个答案:

答案 0 :(得分:0)

尝试:

  var options = {
    url: config.jive.domain + 'api/core/v3/people/' + id + '/images/1/data'
    , user: config.jive.user + ':' + config.jive.pass
    , RAW: 1
  };

这就是将数据作为Buffer而不是String返回给您所需要的。 Node.js get image from web and encode with base64显示了如何使用请求执行此操作。

答案 1 :(得分:0)

正确答案,这是丹科恩回应的一种变体。

var curl = require('curlrequest');

exports.slideImageData = function (req, res){
  var id = req.params.id;
  var prefix = "data:image/png;base64, ";
  var options = {
    url: config.jive.domain + 'api/core/v3/people/' + id + '/images/1/data'
    , user: config.jive.user + ':' + config.jive.pass
    , encoding: null
  };
  curl.request(options, function (err, result){
      var base64Image = new Buffer(result, 'binary').toString('base64');
      base64Image = prefix + base64Image;
      res.send('<img src="' + base64Image + '"/>');
  });
}