首页 > 解决方案 > 如何编写通过 websocket 发送的文件?

问题描述

我正在制作一个服务器系统,其中服务器通过 websockets 将文件上传到客户端。服务器正确地发送文件,但我不知道如何在客户端编写它。

我尝试过使用“msg”、“msg.data”和许多其他方式接收文件数据,但它总是产生一个 1kb 的文件。我还尝试将文件转换为base64,然后在客户端发送和转换回(因此消息将是文本而不是二进制文件),但没有奏效。

服务器:

var ws = require("nodejs-websocket")
ws.setBinaryFragmentation(99999999999)
var fs   = require('fs'),  
    file = process.argv[2],
    data = fs.readFileSync("./map.zip");

    var server = ws.createServer(function (connection) { 

connection.sendBinary(data)
    }).listen(1000)

客户:

var connection = new WebSocket("ws://localhost:1000")

connection.onmessage=function(msg){
    var fs=require("fs")
    fs.writeFileSync("./test.zip",msg.data)
}

标签: javascriptnode.js

解决方案


我认为您应该考虑坚持使用 base64 编码方法,因为二进制文件很难调试。

将其作为 base64 发送并从客户端接收

var connection = new WebSocket("ws://localhost:1000")

connection.onmessage=function(msg){
    var fs=require("fs")
    let buffer = new Buffer(msg.data);
    fs.writeFileSync("test.zip", buffer);
}

这假设这msg.data是一个 base64 编码的二进制文件


推荐阅读