formidable模块API使用方法

发表于:2017-09-28

Node.js 处理POST数据比较麻烦, formidable 模块提供了简单的API。 最近要使用文件上传所以决定挖一下坑。

安装formidable

npm install formidable --save

一个最简单的demo

var express = require('express')
var app = express();
var formidable = require('formidable');

app.post('/upload', (req, res) => {
    var form = new formidable.IncomingForm();
    // 上传文件目录,相对路径或绝对路径
    form.uploadDir = './upload';
    form.parse(req, function(err, fields, files) {
        res.json({
            fields,
            files
        })
    });
})
app.listen(3000);

API

创建对象

var form = new formidable.IncomingForm();

上传文件目录,相对路径或绝对路径

form.uploadDir = "./upload";

表单编码

form.encoding = 'utf-8';

读取type类型, 只读,multipart 或 'urlencoded 或 null

form.type

保持扩展名, 默认false

// true => upload_023fa2f76d159316b4a063b1b50e87ca.jpg
// false => upload_023fa2f76d159316b4a063b1b50e87ca
form.keepExtensions = false;

设置文本域大小, 不包括文件

// 默认是2MB
form.maxFieldsSize = 2 * 1024 * 1024;

设置最大字段,防止内存泄露,默认1000

form.maxFields = 1000;

对文件进行hash效验,默认值false不效验,可以有2个值 'md5' 或 'sha1'

form.hash = false;

开启多文件上传,默认只上传一个文件。如果是true 则form.parse第三个参数files是一个数组, 这个功能需要HTML file加属性multiple

form.multiples = false;

// 前端
<input type="file" name="file" multiple>

form.parse,第一个参数是req,第二个参数是回调方法,err是错误处理, fields是接收到的字段, files是文件信息

form.parse(req, function(err, fields, files) {
        res.json({
            fields,
            files
        })
    });

事件

'progress',对于上传文件进度条非常有用, 每当接收到数据会触发该事件,bytesReceived 服务器已经接收到了多少字节数据,bytesExpected 接收的总字节数据。 上传大文件可以看看效果。

form.on('progress', function(bytesReceived, bytesExpected) {
});

'field' ,接收到字段会触发该事件,不包括文件,name 是你表单的name, value 是文本域的值

form.on('field', function(name, value) {
});

'fileBegin' ,每当在上传流中检测到新文件时发出。如果要将文件流到其他地方,同时缓冲文件系统上的上载,请使用此事件。name是上传文件的name, file是一个对象包含文件一些信息。

form.on('fileBegin', function(name, file) {
});

'file' , 接收到字段或文件会触发该事件,name是上传文件的name, file是一个对象包含文件(详细)信息。

form.on('file', function(name, file) {
});

'error' , 错误会触发这个事件

form.on('error', function(err) {
});

'end' ,处理完所有数据,包括文件已上传到服务器中

form.on('end', function() {
});

'aborted' ,当请求中断触发该事件,注意error事件也会触发

form.on('aborted', function() {
});
Node.js