我需要从外部服务器下载图像并动态地将其推送给我的客户端。
外部服务器正在使用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 :(得分: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 + '"/>');
});
}