自express4.x后,express不再提供文件上传的相关操作,但其建议使用中间件,如busboy, multer, formidable, multiparty, connect-multiparty, or pez。官方说明如下
In Express 4, req.files is no longer available on the req object by default. To access uploaded files on the req.files object, use a multipart-handling middleware like busboy, multer, formidable, multiparty, connect-multiparty, or pez.
今天介绍的是formidable的使用:
安装formidable
npm install formidable
引入formidable,并初始化解析器
var form = require("formidable")
// parse a file upload
var form = new formidable.IncomingForm();
常规设置
//设置文件上传后保存的路径
form.uploadDir = "/my/dir";
//保留原始文件的扩展名
form.keepExtensions = true;
解析表单提交
//express的路由
router.post("/upload",function(req,res,next){
//fields为表单提交时的字段是个json
//files为表单提交时所上传的文件信息的集合通过files.file可以获取所上传文件的较多信息。现在是单文件上传
form.parse(req,function(err,fields,files){
//为上传的文件重命名:其中files.file.path可以获取文件的上传路径
fs.renameSync(files.file.path,form.uploadDir + "/" + files.file.name)
})
//文件上传完成后执行
form.on("end",function(){
})
})
其他属性及方法请参考:
fromidable github地址