Skip to content

文件上传

multipart/form-data 需要专门的解析中间件;express.json()express.urlencoded() 不处理文件上传。Multer 将上传文件写入磁盘或保存在内存中,并将文件信息填入 req.filereq.files

bash
pnpm add multer
js
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 类型、文件内容与扩展名。上传目录不应直接暴露为静态目录;生产环境宜将文件转存至对象存储,并使用随机文件名。

基于 MIT 许可发布