在基于 Node.js 的 Web 开发中,使用 Express 是一个常见的选择。然而,在处理文件上传时,Express 并没有提供内置的解决方案。这时就需要使用一些额外的模块库,而 Multer 就是其中值得一提的一个中间件。
Multer 是基于 Node.js 平台的一个用于处理 FormData 形式的表单数据,特别是文件上传的中间件。Multer 可以将上传的文件存储到指定位置,并在 Express 请求对象中增加一个 files
或者 file
属性来访问这些文件。
安装
在使用 Multer 之前,需要先安装该模块。可以使用 npm 来进行安装。
npm install --save multer
基本用法
使用 Multer 非常简单,只需要在文件上传路由处理函数之前,加入 multer
中间件,并使用 any()
获取所有上传的文件即可。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ----- ------ - ----------------- ----- ------ - -------- ----- ---------- -- ------------------- ------------- ----- ---- -- - ---------------------- -------------- -------- -------------- -- ---------------- -- -- - ---------------- -- --------- -- ---- ------ --
在上述代码中,Multer 中间件使用的是 dest
配置,该配置指定了上传文件的保存目录,所有上传的文件都会保存到该目录中。upload.any()
则表示接收所有上传的文件。
需要注意的是,被上传的文件会被存储在 req.files
中,在处理完上传之后需要向客户端进行回应,否则客户端会一直处于等待状态。
文件名与路径
在上传的过程中,可以通过 storage
配置项来定义文件名和文件路径。下面的代码演示了如何将上传的文件重命名为原始文件名:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ----- ------ - ----------------- ----- ------- - -------------------- ------------ -------- ----- ----- --- - -------- ----------- -- --------- -------- ----- ----- --- - -------- ------------------ - -- ----- ------ - -------- -------- ------- -- ------------------- ------------- ----- ---- -- - ---------------------- -------------- -------- -------------- -- ---------------- -- -- - ---------------- -- --------- -- ---- ------ --
该代码中通过 storage
配置项来定义了文件的存储位置和文件名。存储位置使用的是 destination
选项,而文件名使用的是 filename
选项。在上述示例中,filename
选项采用的是上传的原始文件名。
限制
在处理文件上传时,通常需要控制上传文件的大小、类型等。Multer 提供了一系列的选项来控制文件上传行为,其中 limits
配置项用于限制上传文件的大小。下面的代码限制上传文件的大小为 1MB:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ----- ------ - ----------------- ----- ------ - -------- ----- ----------- ------- - --------- ------- - -- ------------------- ------------- ----- ---- -- - ---------------------- -------------- -------- -------------- -- ---------------- -- -- - ---------------- -- --------- -- ---- ------ --
需要注意的是,上述代码设置的是单个文件的大小限制,如果需要限制上传文件的数量,需要使用 array
或者 fields
选项。
总结
在实际的 Web 开发过程中,文件上传是非常常见的需求,而 Multer 提供了非常方便的解决方案。本文主要介绍了 Multer 的基本用法,涵盖了文件上传、文件名和路径、上传限制等多个方面。希望这篇文章能够对初学者起到一定的指导意义。
示例代码:https://github.com/luojinyong/express-file-upload
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64743b69968c7c53b019f56c