Koa 面试题 目录

Koa 中如何处理文件上传?

推荐答案

在 Koa 中处理文件上传通常使用 koa-body 中间件或 koa-multer 中间件。以下是使用 koa-body 的示例:

-- -------------------- ---- -------
----- --- - ---------------
----- ------- - --------------------
----- -- - --------------
----- ---- - ----------------

----- --- - --- ------

-----------------
  ---------- -----
  ----------- -
    ---------- -------------------- ----------- -- ---------
    --------------- ----- -- -------
  -
----

------------- ----- -- -
  -- ----------- --- ------ -- ------- --- ---------- -
    ----- ---- - ----------------------- -- -------
    ----- ------ - -------------------------------
    ----- ------ - ----------------------------------------- ---------- ------------
    --------------------
    ---------------------- -- -- ---- ---------- -------------
    -------- - ------- ----------
  -
---

---------------- -- -- -
  ------------------- -- ------- -- ------------------------
---

本题详细解读

1. 使用 koa-body 中间件

koa-body 是一个功能强大的中间件,支持处理多种类型的请求体,包括 JSON、表单数据和文件上传。在处理文件上传时,koa-body 会将上传的文件存储在 ctx.request.files 对象中。

2. 配置 koa-body

在配置 koa-body 时,需要设置 multipart: true 以启用文件上传功能。formidable 选项用于配置 formidable 库,该库负责处理文件上传。常见的配置项包括:

  • uploadDir:指定上传文件的保存目录。
  • keepExtensions:是否保留文件的扩展名。

3. 处理上传的文件

在路由处理函数中,可以通过 ctx.request.files 访问上传的文件。每个文件对象包含以下属性:

  • path:文件在服务器上的临时路径。
  • name:文件的原始名称。
  • type:文件的 MIME 类型。
  • size:文件的大小。

可以通过 fs.createReadStream 读取文件,并通过 fs.createWriteStream 将文件写入目标目录。

4. 使用 koa-multer 中间件

koa-multer 是另一个常用的文件上传中间件,基于 multer 库。它提供了更细粒度的控制,适用于需要更复杂文件处理逻辑的场景。

-- -------------------- ---- -------
----- --- - ---------------
----- ------ - ----------------------
----- ------ - ----------------------

----- --- - --- ------
----- ------ - --- ---------
----- ------ - -------- ----- ---------- ---

---------------------- ---------------------- ----- -- -
  -------- - ------- ----------
---

-------------------------
---------------- -- -- -
  ------------------- -- ------- -- ------------------------
---

5. 总结

在 Koa 中处理文件上传可以通过 koa-bodykoa-multer 中间件实现。koa-body 更适合简单的文件上传需求,而 koa-multer 则提供了更多的配置选项,适合复杂的文件处理场景。

纠错
反馈