Node.js 实现文件上传和下载的完整教程

阅读时长 8 分钟读完

随着互联网的发展,文件上传和下载已经成为了我们日常工作中不可或缺的一部分。在前端开发中,我们常常需要实现文件上传和下载的功能。本文将介绍如何使用 Node.js 实现文件上传和下载的完整教程,包括详细的代码和操作步骤。

文件上传

1. 创建上传表单

首先,我们需要在前端页面中创建一个上传表单,让用户可以选择需要上传的文件。可以使用 form 标签和 input 标签来实现:

其中 action 属性指定了上传文件的地址,method 属性指定了请求的方式为 postenctype 属性指定了表单数据的编码类型为 multipart/form-data,这是文件上传时必须设置的。

2. 处理上传请求

当用户点击上传按钮后,前端会向后端发送一个上传请求。在 Node.js 中,我们可以使用 multer 中间件来处理上传请求,代码如下:

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

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

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

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

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

上面的代码中,我们使用 multer 中间件来处理上传请求,首先定义了一个存储引擎 storage,指定了上传文件的存储路径和文件名。然后,我们使用 multer({ storage: storage }) 来创建一个 upload 中间件,用于处理上传请求。最后,我们使用 upload.single('file') 来处理上传的单个文件,并在回调函数中返回上传成功的消息。

3. 完善文件上传

上面的代码只是实现了最基本的文件上传功能,还有一些需要注意的细节:

  • 为了防止上传文件大小超出限制,我们可以使用 limits 选项来设置文件大小限制。
  • 为了防止上传文件类型不符合要求,我们可以使用 fileFilter 选项来设置文件类型过滤器。
  • 为了方便管理上传的文件,我们可以使用 uuid 生成一个唯一的文件名,并将文件名保存在数据库中。

下面是完善后的文件上传代码:

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

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

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

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

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

文件下载

1. 创建下载链接

在前端页面中,我们可以使用 a 标签来创建一个下载链接,代码如下:

其中 href 属性指定了下载文件的地址,filename 参数指定了要下载的文件名。

2. 处理下载请求

当用户点击下载链接时,前端会向后端发送一个下载请求。在 Node.js 中,我们可以使用 express 框架来处理下载请求,代码如下:

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

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

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

上面的代码中,我们使用 fs 模块来读取下载文件,并使用 createReadStream 方法创建一个可读流。然后,我们使用 pipe 方法将可读流输出到响应对象中,实现文件的下载。

3. 完善文件下载

上面的代码只是实现了最基本的文件下载功能,还有一些需要注意的细节:

  • 为了防止下载文件不存在,我们可以使用 fs.existsSync 方法来判断文件是否存在。
  • 为了防止下载文件被恶意访问,我们可以使用 Content-Disposition 头来指定下载文件的名称和类型。
  • 为了方便管理下载的文件,我们可以使用 uuid 生成一个唯一的文件名,并将文件名保存在数据库中。

下面是完善后的文件下载代码:

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

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

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

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

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

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

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

总结

本文介绍了如何使用 Node.js 实现文件上传和下载的完整教程,包括创建上传表单、处理上传请求、创建下载链接、处理下载请求等步骤。同时,我们还介绍了一些需要注意的细节,如文件大小限制、文件类型过滤器、文件名生成、文件不存在处理、文件下载头等内容。希望本文对你有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/656fd1afd2f5e1655d837733

纠错
反馈