Express文件上传中间件Multer详解
Multer是基于Express框架的一个文件上传中间件,它提供了非常方便的文件上传方式并且可以做一些文件的过滤和限制。
安装
使用npm进行安装:
npm install multer
基本使用
Multer可以非常方便地完成文件上传的操作。只需要在路由中引用Multer并设置上传目录和上传文件命名规则即可。
以下是一个简单的例子:
const express = require('express');
const router = express.Router();
const multer = require('multer');
// 定义上传目录和文件名规则
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
})
const upload = multer({ storage: storage })
router.post('/upload', upload.single('file'), function (req, res, next) {
res.send('上传成功!');
});
module.exports = router;
以上的代码通过Multer进行文件上传,由于单文件上传,因此使用的是upload.single()
方法,其中'file'
是上传文件表单的name属性。
需要注意的是,在Multer中使用的diskStorage
存储引擎,其默认是在操作系统的临时目录下完成文件存储,因此一定要在完成文件上传后将其移动到目标目录下。
除此之外,Multer还支持多文件上传,甚至可以支持上传多种类型的文件,下面是更为复杂的例子。
详细使用
多文件上传
在Multer中,通过upload.array()
或upload.fields()
方法可以完成多文件上传的操作。其中,upload.array()
方法用于上传文件数量明确的情况,而upload.fields()
方法则用于上传数量不明确且需要使用名称分组的情况。
以下是一个使用upload.array()
方法上传多个文件的例子:
const express = require('express');
const router = express.Router();
const multer = require('multer');
// 定义上传目录和文件名规则
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
})
const upload = multer({ storage });
router.post('/upload', upload.array('files'), function (req, res, next) {
res.send('上传成功!');
});
module.exports = router;
在以上代码中,使用的是upload.array('files')
方法,其中'files'
表示文件表单的名称。
限制上传文件类型和大小
在Multer中,通过fileFilter
和limits
属性可以对文件进行限制,例如只允许上传图片类型文件和文件大小不能超过2M的限制。
以下是一个例子:
const express = require('express');
const router = express.Router();
const multer = require('multer');
// 定义上传目录和文件名规则
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
});
// 限制文件上传类型
const fileFilter = function(req, file, cb) {
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('只允许上传图片类型文件!'), false);
}
cb(null, true);
};
// 限制文件上传大小
const limits = {
fileSize: 1024 * 1024 * 2 // 2M
};
const upload = multer({ storage, fileFilter, limits });
router.post('/upload', upload.single('file'), function (req, res, next) {
res.send('上传成功!');
});
module.exports = router;
在以上代码中,定义了fileFilter
和limits
两个属性,其中fileFilter
用于限制上传的文件类型,只有符合条件的文件会被保存。而limits
则是用来限制上传的文件大小,超过限制的文件将会被拒绝上传。
总结
Multer提供了非常方便的文件上传方式,使我们不需要过多地关注文件上传的具体细节。同时,通过Multer的配置,我们可以限制上传的文件类型和大小,保证上传的文件符合我们的需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:express文件上传中间件Multer详解 - Python技术站