一、什么是文件上传?
文件上传也称为upload,是指将本地图片、视频、音频等文件上传到服务器存储,可供客户端下载浏览。例如:发朋友圈
二、 Express实现文件上传的中间件
multer
express-fileupload
formidable
busboy
三、multer中间件的使用
(1)作用:
Multer是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。
Multer解析完请求体后,会向Request对象添加一个body对象和file(single,单文件上传)或files(array,多文件上传)对象。
body:提交表单的文本数据
file或files:提交表单上传的文件
(2)使用:
(2-1)安装:
npm install multer -save
(2-2)导入:
const multer=require("multer");
(2-3)配置multer
destination函数定义了文件应该上传到哪里
filename函数用于确定上传文件的文件名。当文件被上传时,Multer会调用这个函数来生成文件的名称。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '我的文件上传地址。在项目中一般在public文件夹下建一个upload来存储。public/upload')
},
filename: function (req, file, cb) {
let ext=path.extname(file.originalname);//获取文件的拓展名
cb(null, file.fieldname + '-' + Date.now()+ext)
}
});
(2-4)产生对象:
var maxSize=1024;
var upload = multer({ storage: storage, limits:{fileSize:maxSize} }) //限制条件limits可省略
(2-5)方法:
1》单文件上传 single()
upload.single("域名")
当我需要单文件上传表单action="/add"时,
router.post('/add', upload.single('avatar'),(req, res)=> {
console.log(req.body);
console.log(req.file);
res.send('ok');
});
2》多文件上传 array()
upload.array("域名",max最大个数);
当我需要多文件上传表单action="/add"时,
router.post('/add', upload.array('avatar',3),(req, res)=> {
console.log(req.body);
console.log(req.files);
res.send('ok');
});
3》多文件域 fields()
upload.fields([{name:"域名",maxCount:1},.....])
当我需要多文件域上传表单action="/add"时,
router.post('/add', upload.fields([{
name:'avatar',
maxCount:3
},{
name:'card',
maxCount:1
}]),(req, res)=> {
console.log(req.body);
console.log(req.files);
res.send('ok');
});
(2-6)req.file中输出的file对象
fieldname - 表单提交的文件域名(name属性)
originalname - 文件在用户设备中的原始名称
encoding - 文件的编码类型
mimetype - 文件的Mime类型
size - 文件的大小
destination - 文件的保存目录(DiskStorage)
filename - 文件在destination中的名称(DiskStorage)
path - 上传文件的全路径(DiskStorage)
buffer - 文件对象的Buffer(MemoryStorage)