Estoy trabajando en un proyecto con Mozilla Europa. En este proyecto, yo uso websocket por Worlize (lado del servidor) y Mozilla (lado del cliente), Node.js para tratar de subir archivos desde un cliente a un servidor.

Mi objetivo es enviar un arraybuffer del archivo en el servidor. Crear el arraybuffer y enviar está bien.

Pero mi servidor me dice que arraybuffer es un utf8 mensaje y no un mensaje binario.

Puedo malinterpretar algo? Si no, ¿cómo puedo corregir eso?

Lado del cliente:

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

Lado del servidor:

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

Trato con Blob demasiado, mismo resultado. El binario parte es invisible.

  • Esta es una P&Un sitio, «tenedor y participar» no va a ocurrir aquí (ver stackoverflow.com/faq). También, por favor, no pedir a la gente a cavar a través de su código – incluir el código mínimo necesario para explicar qué es exactamente lo que están haciendo.
  • Me doy cuenta de que este fue preguntado hace algún tiempo, así que habiendo dicho que yo sólo quiero añadir que Firefox 11 y a partir de compatibilidad binaria ArrayBuffer y Blob.
InformationsquelleAutor Chris | 2012-03-03

2 Comentarios

  1. 23

    Gecko11.0 ArrayBuffer enviar y recibir apoyo para binary data ha sido implementado.

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

    el envío de 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 );
    }

    Recibir 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 />";
    }
    • Lo que significa Gecko11.0
    • pero ¿cómo puedo enviar también, dicen, el nombre de los nombres de archivo junto con los datos? Si lo pongo en un JSON JSON.stringify no funciona para arraybuffers…

Dejar respuesta

Please enter your comment!
Please enter your name here