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