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

414
Vistas
¿Cuál es la salida de un flujo de archivo canalizado?

Tal vez la pregunta no esté redactada de la mejor manera, pero aquí hay más contexto. Usando GridFSBucket, puedo almacenar un archivo en mongo y obtener una secuencia de descarga para ese archivo. Aquí está mi pregunta. Digamos que quiero enviar ese archivo como respuesta a mi solicitud http.

Hago:

 downloadStream.pipe(res);

Ahora, en el lado del cliente, cuando imprimo el texto de respuesta, obtengo una cadena larga con algunos caracteres funky que parecen estar encriptados. ¿Cuál es el formato/tipo de esta cadena/flujo? ¿Cómo configuro mi respuesta para poder obtener los datos transmitidos como ArrayBuffer en mi lado del cliente?

Gracias

ACTUALIZAR:

Todavía no he resuelto el problema, sin embargo, la sugerencia de @Jekrb da exactamente el mismo resultado que hacer console.log(this.responseText) . Parece que la cadena no es un búfer. Aquí está el resultado de estas 2 líneas:

console.log(this.responseText.toString('utf8'))

var byteArray = new Uint8Array(arrayBuffer);

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN 2 - LOS SNIPPETS DE CÓDIGO

Interfaz:

 var savePDF = function(blob){ //fs.writeFile("test.pdf",blob); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE && this.status === 200){ //TO DO: Handle the file in the response which we will be displayed. console.log(this.responseText.toString('utf8')); var arrayBuffer = this.responseText; if (arrayBuffer) { var byteArray = new Uint8Array(arrayBuffer); } console.log(arrayBuffer); } }; xhr.open("POST","/pdf",true); xhr.responseType = 'arrayBuffer'; xhr.send(blob); };

BACKEND:

 app.post('/pdf',function(req,res){ MongoClient.connect("mongodb://localhost:27017/test", function(err, db) { if(err) return console.dir(err); console.log("Connected to Database"); var bucket = new GridFSBucket(db, { bucketName: 'pdfs' }); var CHUNKS_COLL = 'pdfs.chunks'; var FILES_COLL = 'pdfs.files'; // insert file var uploadStream = bucket.openUploadStream('test.pdf'); var id = uploadStream.id; uploadStream.once('finish', function() { console.log("upload finished!") var downloadStream = bucket.openDownloadStream(id); downloadStream.pipe(res); }); // This pipes the POST data to the file req.pipe(uploadStream); }); });
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Supongo que la respuesta se emite como un binario simple que no está codificado en base64 (sigue siendo un búfer) o es una respuesta comprimida (gzip) que primero debe descomprimirse.

Sin embargo, es difícil identificar el problema sin ver el código.

ACTUALIZAR:

Parece que te faltan los encabezados de respuesta adecuados.

Intente configurar estos encabezados antes de downloadStream.pipe(res) :

 res.setHeader('Content-disposition', 'attachment; filename=test.pdf'); res.set('Content-Type', 'application/pdf');
about 4 years ago · Santiago Trujillo Denunciar

0

Es probable que su transmisión ya sea un búfer. Es posible que pueda llamar a responseText.toString('utf8') para convertir los datos transmitidos en una cadena legible.

about 4 years ago · Santiago Trujillo Denunciar

0

¡¡¡Lo resolví!!!

Básicamente, preestablezca el tipo de respuesta en "arraybuffer" antes de realizar la solicitud usando req.responseType = "arraybuffer"

Ahora, una vez que reciba la respuesta, no use responseText , en su lugar use response . La response contiene el arraybuffer con los datos del archivo.

about 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