本文介绍在Node.js中利用Buffer类实现Base64字符串与PNG图片文件的相互转换,并补充了使用fs和mime-types库将任意文件转换为Base64格式的通用方法,涵盖代码示例与关键参数说明。
Node.js Base64与PNG互转实现
日前在技术博客中留意到大厂面试常涉及利用Node.js进行Base64与图片文件互转的题目。鉴于近期开发需求,此处先记录相关实现思路,待下周功能开发完善后再行补充。
第一步,演示如何将Base64字符串转换为图片文件,此处以PNG格式为例。
const fs = require('fs');
const path = 'xxx/'+ Date.now() +'.png';
const base64 = data.replace(/^data:image\/\w+;base64,/,""); //去掉图片base64码前面部分data:image/png;base64
// new Buffer 操作权限太大,v6.0后使用Buffer.from()创建构造函数
const dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,
fs.writeFile(path, dataBuffer, function(err){//用fs写入文件
if(err){
console.log(err);
}else{
console.log('写入成功!');
}
})
首先需要创建Buffer。Buffer是一种类似整数数组的类,其存在原因是JavaScript语言本身仅支持字符串类型,缺乏原生二进制数据类型。然而在处理TCP流或文件流(Base64即属于此类数据流)时,必须依赖二进制数据操作。因此Node.js定义了Buffer类,用于创建专门存放二进制数据的缓存区。
以下是Buffer的一些常用操作方法。
const buf = Buffer.from(string, encoding); // 返回一个被 string,编码格式是base64(默认编码格式是utf-8)的值初始化的新的 Buffer 实例
buf.toJSON(); // 转换为JSON对象
buf.write(string, offset, length, encoding) // 写入node缓存区
buf.toString(encoding, start, end) // 从缓存区读取数据
图片文件转Base64方法
第二步,演示如何将图片文件转换为Base64字符串。
const fs = require("fs");
const util = require("util");
const imageData = await util.promisify(fs.readFileSync(fileUrl)); // 例:xxx/xx/xx.png
const imageBase64 = imageData.toString("base64");
const imagePrefix = "data:image/png;base64,";
console.log(imagePrefix + imageBase64);
任意文件转Base64通用方案
补充知识点:Node.js中如何将任意文件转换为Base64格式。
在处理图片、音频等文件时,若需将数据嵌入内存或生成单文件HTML,转换为Base64格式是较为便捷的方式。Node.js提供了简便的工具将文件转换为Base64格式。
实现该功能需依赖“fs”、“path”及“mime-types”库,其中mime-types库可通过npm安装。具体实现代码如下。
const fs = require('fs');
const path = require('path');
const mineType = require('mime-types');
let filePath = path.resolve('your/file/path');
let data = fs.readFileSync(filePath);
data = new Buffer(data).toString('base64');
let base64 = 'data:' + mineType.lookup(filePath) + ';base64,' + data;
fs.writeFileSync(path.resolve('your/save/file/path'), base64);
执行后生成的文件中即包含该文件的Base64格式数据。在实际应用中,可直接调用转换得到的Base64数据,并将其赋值给img、audio或video标签的相应属性进行展示。
总结
至此,关于使用Node.js实现Base64与PNG文件相互转换的内容介绍完毕。如需了解更多Node.js Base64与PNG转换相关内容,建议搜索本站往期文章或继续浏览后续相关文章,感谢大家的支持。