在 Web 开发中,经常需要实现文件上传和下载功能。在 Node.js 中,使用一些库和技术可以轻松地实现这些功能。本文将介绍 Node.js 中的文件上传和下载技术,包括如何处理文件上传、如何下载文件、如何限制上传文件的类型和大小,以及如何处理上传出错的情况。
处理文件上传
在 Node.js 中,处理文件上传通常使用 multipart/form-data 格式。对于这种格式,Node.js 提供了一个内置模块 formidable,可以方便地解析上传的文件。
安装 formidable 模块:
npm install formidable --save
使用 formidable 解析上传的文件:
-- -------------------- ---- -------
----- ---- - ----------------
----- ---------- - ----------------------
----------------------- ---- -- -
-- -------- --- --------- -- ------------------------ --- ------- -
----- ---- - ------------ ---------- ---- ---
--------------- ----- ------- ------ -- -
-- ----- -
-------------------
-------------- - ----
--------------- --------
-------
-
---------------------- --------
--------------------- -------
-------------- - ----
------------- ------ ----------
---
- ---- -
-------------- - ----
------------ --------
-
--------------- -- -- -
------------------- -- --------- -- -----------------
---在上面的例子中,我们创建了一个 HTTP 服务器,并定义了一个路由 /upload,如果请求类型为 POST,那么就使用 formidable 解析上传的文件。解析完成后,可以从 fields 和 files 中获取上传的文件信息。
下载文件
在 Node.js 中,下载文件可以使用内置模块 fs,该模块提供了一些方法可以读取和写入文件。例如,使用 fs 将文件写入 HTTP 响应:
-- -------------------- ---- -------
----- ---- - ----------------
----- -- - --------------
----------------------- ---- -- -
-- -------- --- ------------ -
------------------------------------ ------------ -----------------------
---------------------------- ----- ----- -- -
-- ----- -
-------------------
-------------- - ----
--------------- --------
-------
-
-------------- - ----
--------------
---
- ---- -
-------------- - ----
------------ --------
-
--------------- -- -- -
------------------- -- --------- -- -----------------
---在上面的例子中,我们定义了一个路由 /download,当请求该路由时,使用 fs 读取文件并将其作为 HTTP 响应的数据返回。同时,我们设置了响应头 Content-Disposition,使得浏览器自动下载该文件。
限制上传文件的类型和大小
在实际开发中,我们常常需要限制上传文件的类型和大小,以防止用户上传不允许的文件或过大的文件。这可以使用 formidable 的一些属性和方法实现。
限制上传文件类型:
const form = formidable({
multiples: true,
// 只允许上传图片和文本类型的文件
type: ['image/jpeg', 'image/png', 'text/plain']
});限制上传文件大小:
const form = formidable({
multiples: true,
// 限制上传文件最大为 2MB
maxFileSize: 2 * 1024 * 1024
});处理上传出错的情况
在处理文件上传时,有时可能会出现上传失败的情况,例如用户中途取消了上传,或者上传的文件大小超过了限制。这时候,我们需要处理这些异常情况,以避免程序崩溃或出现其他不良影响。
处理上传中断的情况:
const form = formidable({ multiples: true });
// 监听 request 对象的 'aborted' 事件
req.on('aborted', () => {
console.log('upload aborted');
});处理上传文件超过限制的情况:
-- -------------------- ---- -------
----- ---- - ------------
---------- -----
-- --------- ---
------------ - - ---- - ----
---
---------------- ----- -- -
-- --------- --- ------------------ -
---------------------------
-------------- - ----
------------- ---- ------- --- --------
- ---- -
-------------------
-------------- - ----
--------------- --------
-
---在上面的例子中,我们使用 formidable 的事件监听机制来捕获出错情况,并作相应的处理。
结语
本文介绍了 Node.js 中的文件上传和下载技术,包括如何处理文件上传、如何下载文件、如何限制上传文件的类型和大小,以及如何处理上传出错的情况。希望本文对您对于 Node.js 文件上传和下载方面的了解和掌握有所帮助。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6782576e935627c90002f1a2