主题
文件上传
multipart/form-data 需要专门的解析中间件;express.json() 和 express.urlencoded() 不处理文件上传。Multer 将上传文件写入磁盘或保存在内存中,并将文件信息填入 req.file 或 req.files。
bash
pnpm add multerjs
import multer from 'multer'
const upload = multer({
dest: 'uploads/',
limits: { fileSize: 5 * 1024 * 1024 },
fileFilter(req, file, callback) {
callback(null, ['image/jpeg', 'image/png'].includes(file.mimetype))
},
})
app.post('/avatar', upload.single('avatar'), (req, res) => {
if (!req.file) {
return res.status(400).json({ message: '请选择 JPEG 或 PNG 图片' })
}
res.status(201).json({ filename: req.file.filename })
})仅将 Multer 应用于需要上传的路由,限制文件大小和数量,并校验 MIME 类型、文件内容与扩展名。上传目录不应直接暴露为静态目录;生产环境宜将文件转存至对象存储,并使用随机文件名。
