在 Express.js 中使用 Multer 处理文件上传的最佳实践

阅读时长 5 分钟读完

在实现前端应用程序时,上传文件是一项常见的任务。Express.js 是一个流行的服务器端框架,它可以用来处理文件上传。Multer 是一个 Node.js 模块,它可以处理多部分(multipart)表单数据,包括文件上传。在本篇文章中,我们将探索使用 Multer 处理文件上传的最佳实践。

安装 Multer

Multer 可以通过 npm 安装,只需要在终端中运行以下命令:

使用Multer

使用 Multer 实现文件上传需要在 Express.js 应用程序中引入 Multer。这可以通过以下代码完成:

上面的代码中,我们引入了 multer 模块,并将上传目录设置为 uploads/。在使用 upload 变量来调用 Multer 时,将文件上传到 uploads/ 目录。您可以将更新后的上传目录设置为另一个目录:

单个文件上传

在使用 Multer 处理单个文件上传时,可以创建一个文件上传表单,然后将表单数据发送到服务器端。之后,您可以使用以下代码从表单中获取上传的文件:

其中,upload.single 方法指示 Multer 仅处理一个文件,名称为 "file"。在上述代码中,我们使用 "app.post" 方法指定服务器端的路径与操作。当我们使用 upload.single 方法调用 Multer 时,Multer 首先解析上传表单,将其存储在磁盘上,然后将已上传的文件信息存储在 req.file 中,该变量包含以下属性:

  • fieldname:表单的名称
  • originalname:上传文件的原始名称
  • encoding:上传文件的编码类型
  • mimetype:上传文件的 MIME 类型
  • size:上传文件的大小
  • destination:文件存储的目标目录
  • filename:上传文件存储后的文件名

多个文件上传

在表单中上传多个文件时,可以使用 upload.array 方法。使用以下代码可以从表单中获取所有文件的信息:

其中,upload.array 方法指示 Multer 处理一个名为 "files" 的数组,其中包含最多 10 个文件。在上述代码中,我们使用 "app.post" 方法指定服务器端的路径与操作。当我们使用 upload.array 方法调用 Multer 时,Multer 首先解析数据,将其存储在磁盘上,然后将已上传的文件的信息存储在 req.files 中,该变量是由 Multer 提供的数组,每个数组项都具有以下属性:

  • fieldname:表单的名称
  • originalname:上传文件的原始名称
  • encoding:上传文件的编码类型
  • mimetype:上传文件的 MIME 类型
  • size:上传文件的大小
  • destination:文件存储的目标目录
  • filename:上传文件存储后的文件名

指定上传文件类型

Multer 可以根据需要进行配置,以仅允许上传特定类型的文件。下面的代码会导致 Multer 只允许上传 png、jpg 和 jpeg 图像文件:

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

在上述代码中,我们添加了 fileFilter 方法,该方法指示 Multer 仅允许上传类型为 "image/png"、"image/jpg" 和 "image/jpeg" 的文件。如果上传的文件类型不属于上述类型,则会返回错误。

自定义文件命名规则

在使用 Multer 时,默认情况下,文件将使用随机生成的文件名进行保存。如果需要对上传的文件使用自定义命名规则,则可以使用 diskStorage 方法来配置 Multer:

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

在上述代码中,我们使用 multer.diskStorage 方法定义一个名为 storage 的自定义存储引擎,该引擎用于指定文件的目标目录和文件名。在此示例中,我们将上传的文件存储在 uploads/ 目录中,并将文件名设置为原始文件名。

结论

本篇文章中,我们探索了使用 Multer 处理文件上传的最佳实践。我们讨论了如何在 Express.js 应用程序中引入 Multer,并使用相应的方法处理上传的单个文件和多个文件。我们还了解了如何指定上传文件的类型和自定义文件命名规则。这些技术可以帮助您更好地处理应用程序中的文件上传。

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

纠错
反馈