2013-12-10 67 views
0

我需要从外部服务器下载图像并将其动态推送给我的客户端。使用curl与node.js下载图像并将其转换为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=="> 

回答

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 + '"/>'); 
    }); 
} 
0

尝试:

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

这就是它需要得到的数据返回给你作为一个缓冲区,而不是一个字符串。 Node.js get image from web and encode with base64显示如何使用请求执行此操作。

+0

当我尝试使用RAW时,出现错误:无法初始化。此外,当我尝试使用编码:空,我得到的错误:未知的编码:[对象对象]。 https://github.com/chriso/curlrequest –

+0

尝试使用它们的RAW示例,它具有稍微不同的语法:https://github.com/jiangmiao/node-curl – dankohn