gpt4 book ai didi

javascript - 如何通过 Websocket 以二进制形式发送 arraybuffer?

转载 作者:行者123 更新时间:2023-12-03 03:20:36 26 4
gpt4 key购买 nike

我正在与 Mozilla Europe 合作开展一个项目。在这个项目中,我使用 Worlize(服务器端)和 Mozilla(客户端)的 websocket、Node.js 尝试将文件从客户端上传到服务器。
我当前的目标是将文件的 arraybuffer 发送到服务器。创建数组缓冲区并发送它就可以了。
但我的服务器告诉我 arraybuffer 是 utf8 消息而不是二进制消息。

我是不是误会了什么?如果不是,我该如何纠正?

客户端:

    reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(e) {
connection.send(e.target.result);
};

服务器端:

ws.on('message', function(message,flags) {
if (!flags.binary) {
//some code
}
else {
console.log('It\'s a binary');
}

我也尝试使用Blob,结果相同。二进制部分是不可见的。

最佳答案

Gecko11.0 ArrayBuffer 已实现对 binary data 发送和接收的支持。

connection = new WebSocket( 'ws://localhost:1740' );
connection.binaryType = "arraybuffer";
connection.onopen = onopen;
connection.onmessage = onmessage;
connection.onclose = onclose;
connection.onerror = onerror;

发送二进制数据:

function sendphoto() {
imagedata = context.getImageData( 0, 0, imagewidth, imageheight );
var canvaspixelarray = imagedata.data;
var canvaspixellen = canvaspixelarray.length;
var bytearray = new Uint8Array( canvaspixellen );
for ( var i = 0; i < canvaspixellen; ++i ) {
bytearray[i] = canvaspixelarray[i];
}
connection.send( bytearray.buffer );
context.fillStyle = '#ffffff';
context.fillRect( 0, 0, imagewidth, imageheight );
}

接收二进制数据:

if ( event.data instanceof ArrayBuffer ) {
var bytearray = new Uint8Array( event.data );
var tempcanvas = document.createElement( 'canvas' );
tempcanvas.height = imageheight;
tempcanvas.width = imagewidth;
var tempcontext = tempcanvas.getContext( '2d' );
var imgdata = tempcontext.getImageData( 0, 0, imagewidth, imageheight );
var imgdatalen = imgdata.data.length;
for ( var i = 8; i < imgdatalen; i++ ) {
imgdata.data[i] = bytearray[i];
}
tempcontext.putImageData( imgdata, 0, 0 );
var img = document.createElement( 'img' );
img.height = imageheight;
img.width = imagewidth;
img.src = tempcanvas.toDataURL();
chatdiv.appendChild( img );
chatdiv.innerHTML = chatdiv.innerHTML + "<br />";
}

关于javascript - 如何通过 Websocket 以二进制形式发送 arraybuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com