express文件上传中间件Multer

express默认并不是处理http请求体中的数据,对于普通请求提(json,二进制,字符串),可以使用body-parser中间件。而对于文件上传(multipart/form-data请求),可以给予请求流处理,也可以使用formidable模块或Multer中间件。

1.multer中间件

multer是express官方推出的,用于node.js multipart/form-data请求数据处理的中间件.

他是基于busboy构建,可以搞笑处理文件上传,并不处理multipart/form-data之外的用户请求。

2.安装

npm install multer --save

3.使用

multer在解析完请求体后,会像request对象中天剑一个body对象和一个file或files对象(上传多个文件时使用files对象)。其中,

包含所提交表单的文本字段(如果有的话),而file(或者files)对象中包含通过表单上传的文件。

基本使用示例如下:

var express=require("express")
var app=express()
var multer=require("multer")
var upload=multer({ dest: 'uploads/' })
var fs=require("fs")
app.use(upload.fields([{ name: 'file1', maxCount: 1 }]))
app.get("/upload",function(req,res){
var html=fs.readFileSync("./upload.html")
res.end(html)
})
app.post("/upload",function(req,res){
if(req.files){
res.end("上传成功")
}else{
res.end("上传错误")
}
console.log("上传文件信息如下:")
console.log(req.files)
})
app.listen(80)

其中文件upload.html代码如下:





upload



选择需要上传的文件:





需要注意的点有:

1.form必须加上属性enctype值为multipart/form-data

2.input(type=“file”)的属性name的值必须和upload.fields函数传入对象的属性name值一样

如何需要上传两个文件可以这样写:

app.use(upload.fields([{ name: 'file1', maxCount: 1 },{name:'file2',maxCount:1}]))

与之对应的form表单这样写:

3个或者4个或者更多文件如此类推,关于req.fiels里面的对象属性值所代表的意思大家可以去参考github上关于multer的介绍。

你可能感兴趣的:(express文件上传中间件Multer)