基于 Node.js 实现文件上传及下载

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');
});

这段代码中,我们首先导入 expressmulter 模块,创建了一个名为 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-TypeContent-DispositionContent-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


纠错反馈