背景
在 Web 应用开发过程中,文件上传和下载是常见的需求。而 Node.js 作为一个基于事件驱动的服务器端 JavaScript 执行环境,提供了丰富的工具和模块,可以很容易地实现文件上传和下载功能。
本文将介绍如何使用 Node.js 实现上传、下载文件的功能,并提供示例代码。阅读本文前需要了解基本的 Node.js 知识。
文件上传
文件上传是指将客户端的文件发送到服务器端,保存在服务器端的硬盘上。其中比较重要的部分是客户端和服务器端的数据传输。这里我们介绍如何使用 Node.js 处理文件的上传过程。
客户端
客户端文件上传通常涉及到 HTML 表单
<form> 标签和 <input /> 标签。这些标签常常被包裹在 <form> 标签内,以支持文件上传。<form enctype="multipart/form-data" method="post" action="/upload"> <input type="file" name="file"> <button type="submit">上传</button> </form>
其中 enctype="multipart/form-data"
指定了上传内容的编码格式,method="post"
表示使用 HTTP POST 方法,action="/upload"
表示上传时需要发送到的后端接口地址。
后端
服务器端的处理过程包括:
- 监听客户端上传请求
- 将上传的文件保存到硬盘中
- 返回上传结果给客户端
Node.js 提供了一些第三方模块和内置 API 以简化上述流程。其中最重要的是 multer
模块,该模块提供了处理 form-data 类型数据的中间件。下面是一个简单的使用 multer
模块实现的文件上传程序:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ------------------ ----- --- - ---------- -- ----------- ----- ------ - -------- ----- ---------- --- -- ------ ------------------- ---------------------- -------- ----- ---- - -- -------- - ------ ----- -- -------- ---------- -------------------- --- -- ---- ---------------- -------- -- - -------------------------- ---
上述代码中,我们首先使用 multer
模块创建了一个用于处理上传请求的对象 upload
,将上传的文件保存到 uploads/
目录中。upload.single('file')
参数指定了文件对应的 form-data 名称,在前端示例代码中指定为 file
。
运行上述代码,启动服务后,即可通过 POST
请求上传某个文件。例如在本地启动一个静态文件服务器:
npx http-server -p 8080
在浏览器中访问 http://localhost:8080/upload.html
,上传任意文件即可。
文件下载
文件下载是指服务器端返回文件给客户端,客户端接收文件并保存到本地磁盘上。这里我们介绍如何使用 Node.js 实现文件下载功能。
客户端
客户端下载通常涉及到 HTML 标签 <a>
,该标签的 download
属性可指定下载文件名。
<a href="/download">下载文件</a>
后端
服务器端的处理过程包括:
- 监听客户端下载请求
- 读取文件并返回给客户端
下面是一个简单的使用 Node.js 实现的文件下载程序:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -- - -------------- ----- --- - ---------- -- ------ -------------------- ------------- ----- -- ------------ ----- ------ - ---------------------------------- ----------------- --- -- ---- ---------------- -------- -- - -------------------------- ---
上述代码中我们首先通过 fs.createReadStream
创建了一个文件读取流,将文件 ./file.txt
返回给客户端,并使用管道 pipe
进行数据传输。
运行上述代码,启动服务后,即可通过浏览器访问 http://localhost:3000/download
,下载文件 ./file.txt
。
总结
本文介绍了如何使用 Node.js 实现文件上传、下载的基本原理和实现方法,以及对应的代码示例。对于开发者来说,掌握如何使用 Node.js 处理文件 IO,有助于更高效地进行 Web 应用开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6496aca448841e98943e8ad6