前端传文件过来一般是通过FormData
数据传递,而解析FormData数据,就得用到了Multiparty
模块,与之功能类似的还有Formidable
,在这里只用到了Multiparty
安装
1 | npm i Multiparty |
使用
创建一个新表单
option
为配置选项,见下文,可填可不填,不填可以在后面通过如form.encoding = 'utf-8'
手动设置
1 | const multiparty = require("multiparty") |
解析FormData数据
1 | 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
1 | const readData = fs.readFileSync(file.path, 'binary') // 根据文件路径读取文件数据 |
整体代码
该代码实现了从前台接收上传的图片,并将其转换为base64格式功能
1 | // 引入multiparty |