2012-03-03 28 views
18

Tôi đang làm việc trên một dự án với Mozilla Europe. Trong dự án này, tôi sử dụng websocket bởi Worlize (phía máy chủ) và Mozilla (phía máy khách), Node.js để thử tải các tệp từ máy khách lên máy chủ.
Mục tiêu hiện tại của tôi là gửi arraybuffer tệp vào máy chủ. Tạo bộ tạo mảng và gửi nó là tốt.
Nhưng máy chủ của tôi cho tôi biết rằng arraybuffer là tin nhắn utf8 chứ không phải là thông báo nhị phân.Làm thế nào gửi arraybuffer như nhị phân thông qua Websocket?

Tôi có hiểu nhầm điều gì đó không? Nếu không, làm thế nào tôi có thể sửa nó?

phía Chủ đầu tư:

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

Server side:

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

tôi cố gắng với Blob quá, kết quả tương tự. Phần nhị phân là vô hình.

+1

Đây là một Q & A trang web, "ngã ba và tham gia" sẽ không xảy ra ở đây (xem http: //stackoverflow.com/faq). Ngoài ra, vui lòng không yêu cầu mọi người tìm hiểu mã của bạn - bao gồm mã tối thiểu cần thiết để giải thích chính xác bạn đang làm gì. –

+0

Tôi nhận ra điều này đã được hỏi một số thời gian trước đây vì vậy có nói rằng tôi chỉ muốn thêm rằng Firefox 11 và trở đi hỗ trợ nhị phân ArrayBuffer và Blob. – SpliFF

Trả lời

19

Gecko11.0 ArrayBuffer gửi và nhận hỗ trợ cho dữ liệu nhị phân đã được thực hiện.

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

gửi dữ liệu nhị phân:

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

recieving dữ liệu nhị phân:

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 />"; 
    } 
Các vấn đề liên quan