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

415
Views
What is the output of a piped file stream?

Perhaps the question is not worded in the greatest way but here's some more context. Using GridFSBucket, I'm able to store a file in mongo and obtain a download stream for that file. Here's my question. Let's say I wanted to send that file back as a response to my http request.

I do:

downloadStream.pipe(res);

On the client side now when I print the responseText, I get some long string with some funky characters that look to be encrypted. What is the format/type of this string/stream? How do I setup my response so that I can get the streamed data as an ArrayBuffer on my client side?

Thanks

UPDATE:

I haven't solved the problem yet, however the suggestion by @Jekrb, gives exactly the same output as doing console.log(this.responseText). It looks like the string is not a buffer. Here is the output from these 2 lines:

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

var byteArray = new Uint8Array(arrayBuffer);

enter image description here

UPDATE 2 - THE CODE SNIPPETS

Frontend:

    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);
});
});
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

My guess is that either the response is being outputted as plain binary which is not base64 encoded (still a buffer) or it is a compressed (gzip) response that needs to be uncompressed first.

Hard to pinpoint the issue without seeing the code though.

UPDATE:

Looks like you're missing the proper response headers.

Try setting these headers before the downloadStream.pipe(res):

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

0

Your stream is likely already a buffer. You might be able to call responseText.toString('utf8') to convert the streamed data into readable string.

over 4 years ago · Santiago Trujillo Report

0

I solved it!!!

Basically preset the response type to "arraybuffer" before you make the request using req.responseType = "arraybuffer"

Now, once you receive the response, don't use responseText, instead use response. response contains the arraybuffer with the data for the file.

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!