自己都觉得搞笑的是,之前写前端图片裁剪代码的时候,想解决的问题是如何将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对象赋值给datavar 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)});});
})
搞定了。