node 根据图片img url 获取 base64

自己都觉得搞笑的是,之前写前端图片裁剪代码的时候,想解决的问题是如何将canvas裁剪的base64图片转化为file格式上传。而现在考虑的问题是,如何将网络中的图片转化为base64图片格式。
两种写法,思想一摸一样。一种是http库实现的,另外一种是superagent实现,我一般都使用superagent库。

  • http实现 主要来源自网络代码
const http = require('http');

const url = 'http://p0.meituan.net/tuanpic/3df525af5a3f7fe04077567d2a6caf794904.png';
http.get(url, function (res) {
  var chunks = []; //用于保存网络请求不断加载传输的缓冲数据
  var size = 0;   //保存缓冲数据的总长度
  res.on('data', function (chunk) {
    chunks.push(chunk);
    //累加缓冲数据的长度
    size += chunk.length;
  });
  res.on('end', function (err) {
    //Buffer.concat将chunks数组中的缓冲数据拼接起来,返回一个新的Buffer对象赋值给data
    var data = Buffer.concat(chunks, size);
    //可通过Buffer.isBuffer()方法判断变量是否为一个Buffer对象
    console.log(Buffer.isBuffer(data));
    //将Buffer对象转换为字符串并以base64编码格式显示
    const base64Img = data.toString('base64');
    //进入终端terminal,然后进入index.js所在的目录,
    return base64Img
  });
});
  • superagent实现 自己封装,使用了promise
 const img2Base64 = await new Promise(async function (resolve, reject) {
 const url = 'http://p0.meituan.net/tuanpic/3df525af5a3f7fe04077567d2a6caf794904.png';
 await superagent.get(url).buffer(true).parse((res) => {
   let buffer = [];
   res.on('data', (chunk) => {
     buffer.push(chunk);
   });
   res.on('end', () => {
     const data = Buffer.concat(buffer);
     const base64Img = data.toString('base64');
     resolve(base64Img)
   }
   );
 });
})

搞定了。

你可能感兴趣的:(node)