Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

419
Vistas
¿Cuál es la forma correcta de enviar ArrayBuffer o Blob y reconstruirlos?

He leído una docena de publicaciones sobre cómo convertir ArrayBuffer a Blob o Uint8Array etc. antes de enviar los datos al lado del cliente... pero parece que no puedo hacer que funcione en absoluto. Cuando obtengo los datos, no pude reconstruirlos como un Blob antes de enviarlos a un archivo.

 const Blob = require('cross-blob'); const randomBytes = require('randombytes'); const buffer = randomBytes(1024); // Supposed to give me Buffer

Las siguientes fueron las cosas que probé...

 data = buffer;

^ me da <Buffer 11 22 33 ...>

 data = Uint8Array.from(buffer);

^ me da una matriz de enteros, ¿esto parecía el más prometedor? pero cuando llegó al lado del cliente, se convirtió en un objeto con índices y valor de bytes...

 data = Uint8Array.from(buffer).buffer;

^ da ArrayBuffer { byteLength: 1024} , cuando lo inspeccione, muestra el size: 2 y type: 'text/plain' ...

 data = new Blob(buffer, { type: 'application/octet-stream' }); data = new Blob([new Uint8Array(buffer, buffer.byteOffset, buffer.length)], { type: 'application/octet-stream' }); data = new Blob([Uint8Array.from(buffer)], { type: 'application/octet-stream' });

^ todo esto, cuando llegó al lado del cliente también con size: 2 y type: 'text/plain' ...

En el lado del servidor, estoy ejecutando Express:

 router.get('/test/*', function(req, res, next) { ... let data = myFunctionThatGeneratesData(); res.send(data);

});

En el lado del cliente, lo solicito así (Angular/TypeScript):

 this.http.get('/test/random-bytes-array', { responseType: 'blob' // also tried 'arraybuffer' }).subscribe(data => { debugger; console.log(data); });

Debo estar haciendo algo mal ... Estoy tratando de enviar varios fragmentos de datos binarios, ya sea como ArrayBuffer , Uint8Array o Blob (lo que funcione) y cuando llegue al otro extremo, combínelos nuevamente en un Blob .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En Node.js, crypto.randomBytes devuelve un Buffer . Este es el tipo correcto para usar para enviar datos sin procesar al cliente.

Al usar Express, es importante establecer el tipo de contenido correcto de la respuesta usando res.type() . Sin embargo, al enviar un Buffer , si el encabezado de tipo de contenido no está configurado en ningún otro middleware, express usará application/octet-stream de manera predeterminada .

Cuando el parámetro es un objeto de búfer, el método establece el campo de encabezado de respuesta de tipo de contenido en "aplicación/flujo de octetos", a menos que se haya definido previamente.

 router.get('/test/*', function(req, res, next) { ... let data = myFunctionThatGeneratesData(); res.type('application/octet-stream').send(data); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ might not be necessary });

Y, por último, en Angular, usar el tipo de responseType: 'blob' es correcto:

 this.http.get('/test/random-bytes-array', { responseType: 'blob' }).subscribe(data => { console.log(data); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda