Multer是一个Node.js中间件,用于处理“multipart/form-data”类型的数据,主要用于文件上传。在前端开发中,文件上传是非常常见的需求,因此掌握Multer的使用技巧对于前端工程师来说非常重要。
安装Multer
我们可以使用npm来安装Multer,运行以下命令:
npm install --save multer
Multer的基本使用
为了使用Multer,我们需要首先引入它:
const multer = require('multer');
然后,我们需要配置一个存储引擎和路径。这里我们以磁盘存储为例,将上传的文件保存到名为uploads的文件夹中:
-- -------------------- ---- ------- ----- ------- - -------------------- ------------ -------- ----- ----- --- - -------- ----------- -- --------- -------- ----- ----- --- - -------- -------------- - --- - ----------- - -- ----- ------ - -------- -------- ------- --
在上面的代码中,我们定义了一个存储引擎storage
,并将其传递给multer
构造函数。存储引擎指定了文件的存储位置和文件名的生成方式。这里我们将文件存储到uploads/
目录下,并使用字段名和当前时间戳来生成文件名。
接下来,我们就可以通过调用upload
中间件来处理文件上传了:
app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file 是 `avatar` 文件的信息 // req.body 将具有文本域数据,如果存在的话 })
在上面的代码中,我们定义了一个POST请求处理函数,使用了upload.single
中间件。该中间件指定只上传一个名为avatar
的文件,并将其存储到磁盘上。
当服务器接收到一个符合要求的POST请求时,Multer会自动将上传的文件保存到指定路径中,并将文件信息添加到req.file
对象中。我们可以通过访问req.file
来获取上传的文件信息。
高级用法
Multer还提供了一些高级用法,如同时上传多个文件、限制文件类型和大小等。
以下是一个示例代码,展示了如何使用Multer同时上传多个文件,并限制文件大小和类型:
-- -------------------- ---- ------- ----- ------- - -------------------- ------------ -------- ----- ----- --- - -------- ----------- -- --------- -------- ----- ----- --- - -------- -------------- - --- - ----------- - -- ----- ---------- - -------- ----- ----- --- - -- ----------------- -- -------------- --- ------------ -- ------------- --- ------------ - -------- ----- - ---- - ------ ----------- ---- --- --- ----- --- ----------- ------ - - ----- ------ - - --------- ---- - ---- -- ---------- - ----- ------ - -------- -------- -------- ----------- ----------- ------- ------ -- -------------------------- ---------------------- --- -------- ----- ---- ----- - -- --------- -------- -- -------- --------------- --
在上面的代码中,我们定义了一个存储引擎storage
、一个文件过滤器fileFilter
和一个文件大小限制limits
。然后,我们将这些配置传递给multer
构造函数,创建一个upload
中间件。
在POST请求处理函数中,我们使用upload.array
中间件来同时上传多个名为photos
的文件,并限制最多上传5个文件。当上传的文件不符合文件类型或文件大小限制时,Multer会自动抛出错误并返回给客户端。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/42806