526 字
1 分钟
NodeJS接收前端文件并转为base64
前端传文件过来一般是通过FormData数据传递,而解析FormData数据,就得用到了Multiparty模块,与之功能类似的还有Formidable,在这里只用到了Multiparty
安装
npm i Multiparty使用
创建一个新表单
option为配置选项,见下文,可填可不填,不填可以在后面通过如form.encoding = 'utf-8'手动设置
const multiparty = require("multiparty")const form = new multiparty.Form(option)解析FormData数据
form.parse(req, (err, fields, files) => {})利用parse(request, callback)方法解析,接收两个参数request和callback,无返回值
- request:request对象,把创建服务时的回调函数的第一个参数
req传进去即可 - callback:回调函数,可以获取到解析后的数据,且默认自动开启了
autoFields和autoFlies,如果要文件上传的话只需要提前设置好uploadDir,插件就已经帮你做完一切了
回调函数内有三个参数err、fields和files:
- err:发生错误时,返回的错误信息
- fields:一个对象,存储着
FormData里的字段信息 - files:存储着文件信息,如果前端把整个
file对象直接放进formData内,则有值,否则为空对象。
常用配置选项
详细配置参考Multiparty文档
- encoding:formdata的数据设置编码,默认是
utf-8 - maxFieldsSize<限制所有字段按字节分配的内存量>限制所有字段按字节分配的内存量>,默认是
2M,超出则会产生错误。 - maxFields:限制被解析字段的数量,默认为1000
- maxFilesSize:此属性只有在autoFiles为true的时候生效,限制最大能上传多大的文件
- autoFields:启用字段事件,并禁用字段的部分事件。如果监听字段事件,该属性自动为true。
- autoFiles:启用文件事件,并禁用部分文件事件,如果监听文件事件,则默认为true
- uploadDir:放置文件的目录,只有autoFiels为true时有效
文件转换为base64
const readData = fs.readFileSync(file.path, 'binary') // 根据文件路径读取文件数据const srcBase64 = Buffer.from(readData, 'binary').toString('base64') // 根据文件数据获取base64(不包含头部)const headerSrc = 'data:image/' + path.extname(file.path).substr(1) + ';base64,' // 手动生成头部部分console.log(headerSrc + srcBase64)整体代码
该代码实现了从前台接收上传的图片,并将其转换为base64格式功能
// 引入multipartyconst multiparty = require("multiparty")
// 创建一个新表单const form = new multiparty.Form()
// 设置配置选项form.encoding = 'utf-8'form.maxFieldsSize = 10 * 1024 * 1024
// 解析FormData数据form.parse(req, (err, fields, files) => { // 注:这里multiparty进行了自动上传,files中包含自动上传后的文件路径,因此可以通过路径读取文件数据 const file = files.file[0] const readData = fs.readFileSync(file.path, 'binary') const headerSrc = 'data:image/' + path.extname(file.path).substr(1) + ';base64,' const srcBase64 = Buffer.from(readData, 'binary').toString('base64') console.log(headerSrc + srcBase64) // 打印图片base64数据}参考
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
NodeJS接收前端文件并转为base64
https://marrydream.top/posts/nodejs/nodejs接收前端文件并转为base64/ 部分信息可能已经过时
相关文章 智能推荐