首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过Websocket将arraybuffer作为二进制发送?

如何通过Websocket将arraybuffer作为二进制发送?
EN

Stack Overflow用户
提问于 2012-03-03 21:20:07
回答 2查看 51.2K关注 0票数 26

我正在与Mozilla欧洲的一个项目工作。在这个项目中,我使用websocket by Worlize (服务器端)和Mozilla (客户端),Node.js尝试将文件从客户端上传到服务器。

我目前的目标是将文件的arraybuffer发送到服务器。创建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,同样的结果。二进制部分是不可见的。

EN

回答 2

Stack Overflow用户

发布于 2012-07-11 13:24:59

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

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

发送Binary data

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

接收Binary Data

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 />";
}
票数 28
EN

Stack Overflow用户

发布于 2012-04-06 01:12:42

Note: Prior to version 11, Firefox only supported sending data as a string.

来源:https://developer.mozilla.org/en/WebSockets/Writing_WebSocket_client_applications

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9546437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档