21xrx.com
2024-12-22 21:24:33 Sunday
登录
文章检索 我的文章 写文章
Node.js 实现 WebSocket 上传文件功能
2023-07-05 08:41:23 深夜i     --     --
Node js WebSocket 上传文件 实现 功能

在现代的 web 应用开发中,实时性非常重要。在实时性要求比较高的 web 应用中,常会使用 WebSocket 技术。

WebSocket 是一种建立在 TCP 协议基础上的全双工通信协议,它可以实现客户端和服务端之间的实时双向通信。在实时的 web 应用中,除了实时的消息推送,文件上传也是必不可少的功能。

Node.js 是一种非常流行的服务端编程语言,它可以轻松地实现 WebSocket 上传文件功能。下面将介绍如何使用 Node.js 实现 WebSocket 上传文件功能。

首先,我们需要安装一些 Node.js 模块。运行以下命令来安装这些模块:


npm install websocket fs path

其中,websocket 是 WebSocket 库,fs 和 path 是 Node.js 原生模块,分别用于读取文件和处理文件路径。

接下来,我们需要创建一个 WebSocket 服务端。代码如下:


const WebSocketServer = require('websocket').server;

const http = require('http');

const fs = require('fs');

const path = require('path');

const server = http.createServer((request, response) => {

  response.writeHead(404);

  response.end();

});

server.listen(8080, () => {

  console.log('Server is listening on port 8080');

});

const wsServer = new WebSocketServer(

  httpServer: server

);

wsServer.on('request', (request) => {

  const connection = request.accept(null, request.origin);

  connection.on('message', (message) => {

    if (message.type === 'utf8') {

      console.log(`Received message: ${message.utf8Data}`);

    } else if (message.type === 'binary') {

      console.log(`Received binary data. Message size: ${message.binaryData.length} bytes.`);

      fs.writeFile(path.join(__dirname, 'uploads', 'filename.txt'), message.binaryData, (err) => {

        if (err) {

          console.log(`Error writing file: ${err}`);

        } else {

          console.log('File written successfully');

        }

      });

    }

  });

});

上面的代码创建了一个 HTTP 服务器,并使用 WebSocket 库创建了一个 WebSocket 服务端。WebSocket 服务端监听客户端的连接请求,并在客户端连接成功后,等待客户端发送消息。如果客户端发送的是文本消息,WebSocket 服务端会直接打印出消息内容。如果客户端发送的是二进制消息,WebSocket 服务端会将消息保存到 uploads 目录下的 filename.txt 文件中。如果文件已经存在,WebSocket 服务端会覆盖它。

现在,我们需要创建一个客户端来测试 WebSocket 上传文件功能。代码如下:


const WebSocket = require('ws');

const fs = require('fs');

const path = require('path');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {

  console.log('Connected to server');

  const file = fs.readFileSync(path.join(__dirname, 'file.txt'));

  ws.send(file,

    binary: true

  , () => {

    console.log('File sent');

  });

});

ws.on('error', (err) => {

  console.log(`Error: ${err}`);

});

ws.on('close', () => {

  console.log('Connection closed');

});

上面的代码创建了一个 WebSocket 客户端,并连接到上面创建的 WebSocket 服务端。客户端读取了本地的 file.txt 文件,并使用 WebSocket 发送了它。发送时,客户端设置了 binary 标志,以告诉 WebSocket 库这是一个二进制文件。

运行上面的代码后,我们可以在服务端控制台看到文件上传的日志输出。这表示文件已经成功上传到服务端。我们可以在 uploads 目录下找到文件,确认文件内容与原文件相同。

至此,我们已经成功地使用 Node.js 实现了 WebSocket 上传文件功能。在实时性要求比较高的 web 应用中,这种实现方式可以让用户以更加快速、高效的方式上传文件。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复