2012-03-03 21 views
18

Mozilla Europe ile bir proje üzerinde çalışıyorum. Bu projede, bir istemciden sunucuya dosya yüklemeyi denemek için Worlize (sunucu tarafı) ve Mozilla (istemci tarafı), Node.js tarafından websocket kullanıyorum.
Şimdiki hedefim, sunucunun bir arraybuffer dosyasını sunucuya göndermektir. Arraybuffer oluşturun ve göndermek iyidir.
Ancak sunucum bana arraybuffer'un bir utf8 mesaj olduğunu ve ikili mesaj olmadığını söylüyor.arraybuffer Websocket ile ikili olarak nasıl gönderilir?

Bir şeyi yanlış anlıyor muyum? Yoksa, bunu nasıl düzeltebilirim?

İstemci tarafı:

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

Sunucu tarafı: Ben Blob de aynı sonucu deneyin

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

. İkili bölüm görünmez.

+1

burada ne olacak değil (http: //stackoverflow.com/faq). Ayrıca, lütfen insanlardan kodunuzu girmesini istemeyin; tam olarak ne yaptığınızı açıklamak için gereken minimum kodu ekleyin. –

+0

Bunun bir süre önce bu Firefox 11'i eklemek istediğimi ve daha sonra ikili ArrayBuffer ve Blob'u desteklediğini söylediğimi anladım. – SpliFF

cevap

19

Gecko11.0 ArrayBuffer göndermek ve ikili veri uygulamaya konmuştur için destek alırlar.

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

almakta olan İkili Veri:

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

İkili veri göndermeyi, "çatalı ve katılmak" Bu Q & A sitedir

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 />"; 
    }