Mozilla Europeとのプロジェクトに取り組んでいます。このプロジェクトでは、Worize(サーバー側)とMozilla(クライアント側)のwebsocket、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