请说明在 Koa 应用中处理 multipart 请求(即包含文件上传的表单数据)的常见做法,包括需要引入的中间件、主要配置项以及请求解析后的处理流程。
考察说明
考查对 Koa 中 multipart 请求处理方式及常用中间件的了解。
回答思路
- 【回答框架 1】multipart 请求是 HTTP 的一种格式,主要用于文件上传,Koa 本身不解析 body,需要借助中间件。常用的有 koa-body、koa-multer 等。以 koa-body 为例,安装后通过 app.use(koaBody({ multipart: true })) 启用,配置可包含 uploadDir(上传目录)和 formidable 选项等。
- 【回答框架 2】解析后,ctx.request.body 包含普通字段,ctx.request.files 包含上传的文件,每个文件对象有 name、path、size 等属性。处理流程通常是先校验文件大小和类型,然后将文件从临时目录移动到目标位置,并记录文件信息。
- 【回答框架 3】如果是 koa-multer,它基于 multer,通过定义存储引擎(如 diskStorage)来配置保存路径,使用 upload.single('file') 中间件处理单个文件,之后文件信息挂载在 ctx.file 上,然后进行业务处理。
- 【回答框架 4】还需处理错误情况,如上传中断、文件过大等,koa-body 会抛出异常,需在错误处理中间件中捕获并返回适当的响应。
- 【关键点 1】Koa 需要用中间件解析 multipart,常用 koa-body 或 koa-multer。
- 【关键点 2】配置 multipart: true 后,普通字段和文件分别位于 ctx.request.body 和 ctx.request.files。
- 【关键点 3】文件处理需注意权限、路径安全和类型校验。
- 【易错点 1】不要直接使用 koa-bodyparser 处理 multipart,它不支持文件上传。
- 【易错点 2】忽略大小限制可能导致内存或磁盘溢出。
- 【易错点 3】临时文件需要及时清理或移动,避免残留。