在 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 文件上传和下载方面的了解和掌握有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6782576e935627c90002f1a2