簡體   English   中英

如何通過Websocket發送arraybuffer作為二進制文件?

[英]How send arraybuffer as binary via Websocket?

我正在與Mozilla Europe合作開展一個項目。 在這個項目中,我使用了由Worlize(服務器端)和Mozilla(客戶端)的Nodeocket,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 ,結果相同。 二進制部分是不可見的。

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;

發送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 />";
}
Note: Prior to version 11, Firefox only supported sending data as a string.

資料來源: https//developer.mozilla.org/en/WebSockets/Writing_WebSocket_client_applications

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM