Multer 2.2 + Express 5 + TypeScript 教程导航
本系列基于 Multer 官方仓库 和当前项目安装的 multer@2.2.0 编写。
Multer 是处理 multipart/form-data 的 Express 中间件,底层使用 Busboy 解析 multipart 流。它负责接收文件,不负责判断文件一定安全,也不负责长期文件管理。
学习路线
- 01 multipart/form-data 与基础上传
- 02 上传 API 与多文件
- 03 存储、元数据与下载
- 04 文件名和路径安全
- 05 文件验证与尽早拒绝
- 06 错误处理、清理与一致性
- 07 TypeScript 与 Express 工程整合
- 08 生产环境最佳实践
上传安全的核心心智模型
客户端 FormData
→ Nginx 整体请求限制
→ Multer/Busboy 解析 multipart
→ limits 与 fileFilter
→ 临时隔离存储
→ Magic Number/解码/病毒扫描
→ 正式存储
→ MySQL 保存元数据和业务关系
必须始终认为下面的数据不可信:
file.originalname
file.mimetype
文件扩展名
multipart 文本字段
文件内容
高频 API
multer(options)
upload.single(fieldname)
upload.array(fieldname, maxCount)
upload.fields(fields)
upload.none()
multer.diskStorage()
multer.memoryStorage()
limits
fileFilter
multer.MulterError
.any() 虽然存在,但不应作为全局中间件,也不应成为普通接口的默认方案。
三种不同的名称
一个文件通常需要区分:
| 名称 | 用途 |
|---|---|
original_name |
用户下载时希望看到的名称 |
storage_key |
服务器或对象存储中的随机安全名称 |
file_id |
业务 API 使用的数据库 ID |
不要把用户文件名直接当成磁盘路径或对象存储 key。