有没有办法通过websocket在一个请求中发送文本和二进制文件?例如:文件名(文本)和文件内容(二进制)
我可以像字符串一样发送它们:
JSON.stringify({filename: "test.dat", filecontent: data});
但它比仅将文件内容发送为二进制(arraybuffer)慢很多。
答案 0 :(得分:3)
请记住二进制文件只是编码数据。这不是一个JavaScript问题,而是一个编码问题。我就是这样做的。
在请求开头留出32位(表示一个整数),以指定test.dat
的位长度。然后将其与您的两个数据源结合使用。您的有效负载将如下所示:
TEXT_LENGTH + TEST.DAT作为二进制+ FILECONTENT作为二进制文件
然后将数据作为数组缓冲区返回。使用
textLengthBits = parseInt(arrBuffer.slice(0,32), 2);
获取文本的长度。然后再切片,
textBits = arrBuffer.slice(32, 32 + textLengthBits)
获取文字。其余的位是你的文件。
fileBits = arrBuffer.slice(32 + textLengthBits);