Node.js 是一种非常流行的后端 JavaScript 运行环境。它强大的事件驱动、非阻塞 I/O 模型使得它非常适合并发处理请求,可以快速构建高性能服务器端应用程序。
在本文中,我们将介绍如何使用 Node.js 实现文件上传和下载功能。这些功能是任何 Web 应用程序的重要组成部分,因此学习如何实现它们是非常有价值的。
文件上传
在 Node.js 中实现文件上传功能可以通过 multer
模块来实现。这是一个 Node.js 中基于中间件的文件上传处理的模块,它支持多文件上传和文件大小限制等功能。
首先需要安装 multer
模块:
npm install --save multer
接下来,我们需要创建一个 Node.js 服务,以便可以接收来自前端的文件上传请求。
const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('file'), (req, res) => { res.send('File uploaded successfully'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
这段代码中,我们首先导入 express
和 multer
模块,创建了一个名为 app
的 Express 应用程序。然后,调用 multer
函数并传入一个对象,指定文件保存的位置,这里我们将文件保存到 uploads/
目录中。接着,当有 POST 请求发送到 '/upload' 路由时,文件被上传并保存到指定目录中。
上述代码块中,upload.single
函数表示我们只允许上传单个文件,用于处理前端通过 FormData
上传过来的名为 file
的数据。如果您需要上传多个文件,则可以使用 upload.array
函数或者 upload.fields
函数。
同时,您还需要在前端 HTML 代码中加入文件上传表单。下面是一个 HTML 示例:
<!DOCTYPE html> <html> <head> <title>File Upload Example</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="submit" value="Upload"> </form> </body> </html>
当用户选择并上传文件时,这个表单数据将被发送到服务器,我们的 Express 路由处理函数会接收到一个 req.file
对象,该对象包含上传文件的元数据。
文件下载
要实现文件下载功能,我们需要使用 Node.js 的 fs
模块。通过使用该模块,我们可以读取和写入文件,同时,我们也需要设置一些 HTTP 头部的信息,如文件类型、文件名和文件大小等信息。
以下是一个示例代码:
const express = require('express'); const app = express(); const fs = require('fs'); app.get('/download', function(req, res){ const filePath = "/path/to/file"; fs.readFile(filePath, function (err, data) { if (err) { res.writeHead(404, {'Content-Type': 'text/html'}); return res.end("404 Not Found"); } res.writeHead(200, { 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename=file.txt', 'Content-Length': data.length }); res.write(data); res.end(); }); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在上面的示例代码中,我们首先创建了一个名为 app
的 Express 应用程序。当用户访问 '/download' 路径时,将会触发回调函数,该回调函数会读取 /path/to/file
路径的文件,然后将文件内容发送回客户端。
在向客户端发送文件内容之前,需要为响应设置 Content-Type
、Content-Disposition
和 Content-Length
等标头。前两个标头用于指示下载文件的文件名和类型,而 Content-Length
则指示文件的大小。然后,我们可以使用 res.write()
和 res.end()
方法将文件内容发送回客户端。
接下来,我们可以使用类似以下的 HTML 代码在前端实现下载功能:
<a href="/download" download>Download File</a>
在点击该链接时,浏览器将向服务器发送一个请求并下载文件。下载的文件名将是在服务器端定义的名称,而不是 URL 上指定的名称。
总结
在本文中,我们介绍了如何使用 Node.js 和一些相关的模块实现文件上传和下载功能。使用这些技术,我们可以轻松地将文件传输到服务器或从服务器下载文件。
掌握如何实现文件上传和下载功能对于任何 Web 开发人员都是非常重要的。希望本文的小例子和代码可以帮助您更好地了解这些技术,并将其应用到实际的 Web 项目中。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659218c0eb4cecbf2d6ffed3