- 关键中间件:
- multer:这是在Express框架中常用的处理文件上传的中间件。
- 配置步骤:
- 安装multer:首先在项目目录下通过
npm install multer
命令安装multer。
- 引入和配置multer:在Express应用的代码中,引入multer并进行配置。例如:
const express = require('express');
const multer = require('multer');
const app = express();
// 配置文件存储
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/'); // 文件存储目录
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, file.fieldname + '-' + uniqueSuffix + '.' + file.originalname.split('.').pop()); // 生成唯一文件名
}
});
// 设置文件大小限制,这里设为10MB
const upload = multer({
storage: storage,
limits: {
fileSize: 10 * 1024 * 1024 // 10MB
},
fileFilter: function (req, file, cb) {
const filetypes = /jpeg|jpg|png|pdf|docx|xlsx/;
const extname = filetypes.test(file.originalname.split('.').pop().toLowerCase());
const mimetype = filetypes.test(file.mimetype);
if (extname && mimetype) {
return cb(null, true);
}
cb(new Error('文件类型不支持'));
}
});
// 处理单文件上传
app.post('/upload', upload.single('file'), function (req, res) {
if (req.file) {
res.send('文件上传成功');
} else {
res.status(400).send('文件上传失败');
}
});
const port = 3000;
app.listen(port, function () {
console.log(`服务器运行在端口 ${port}`);
});
- 解释:
- destination:指定文件上传后的存储目录,这里是
uploads/
目录,需要确保该目录存在,不存在则需手动创建。
- filename:定义上传文件的命名规则,这里通过时间戳和随机数生成唯一文件名,避免文件名冲突。
- limits.fileSize:设置允许上传的文件大小限制,单位是字节,这里设置为10MB。
- fileFilter:用于过滤文件类型,只有符合指定类型(这里是常见的图片、文档类型)的文件才能上传。
- upload.single('file'):表示处理单个文件上传,
'file'
是表单中文件字段的名称。如果要处理多个文件上传,可以使用upload.array('files', 5)
,其中'files'
是表单中文件字段名称,5
表示最多允许上传5个文件。