Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

417
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!