在实现前端应用程序时,上传文件是一项常见的任务。Express.js 是一个流行的服务器端框架,它可以用来处理文件上传。Multer 是一个 Node.js 模块,它可以处理多部分(multipart)表单数据,包括文件上传。在本篇文章中,我们将探索使用 Multer 处理文件上传的最佳实践。
安装 Multer
Multer 可以通过 npm 安装,只需要在终端中运行以下命令:
npm install multer --save
使用Multer
使用 Multer 实现文件上传需要在 Express.js 应用程序中引入 Multer。这可以通过以下代码完成:
const multer = require('multer'); const upload = multer({ dest: 'uploads/' });
上面的代码中,我们引入了 multer 模块,并将上传目录设置为 uploads/
。在使用 upload 变量来调用 Multer 时,将文件上传到 uploads/
目录。您可以将更新后的上传目录设置为另一个目录:
const upload = multer({ dest: 'uploads/' });
单个文件上传
在使用 Multer 处理单个文件上传时,可以创建一个文件上传表单,然后将表单数据发送到服务器端。之后,您可以使用以下代码从表单中获取上传的文件:
app.post('/upload', upload.single('file'), (req, res) => { // 处理上传的文件 });
其中,upload.single
方法指示 Multer 仅处理一个文件,名称为 "file"。在上述代码中,我们使用 "app.post" 方法指定服务器端的路径与操作。当我们使用 upload.single 方法调用 Multer 时,Multer 首先解析上传表单,将其存储在磁盘上,然后将已上传的文件信息存储在 req.file
中,该变量包含以下属性:
fieldname
:表单的名称originalname
:上传文件的原始名称encoding
:上传文件的编码类型mimetype
:上传文件的 MIME 类型size
:上传文件的大小destination
:文件存储的目标目录filename
:上传文件存储后的文件名
多个文件上传
在表单中上传多个文件时,可以使用 upload.array
方法。使用以下代码可以从表单中获取所有文件的信息:
app.post('/upload', upload.array('files', 10), (req, res) => { // 处理上传的文件 });
其中,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