简体   繁体   中英

Nodejs download binary octet-stream

I am trying to download (meaning create an instance of the file on the server) a.pdf file from a server that returns it to me in binary format, with: Content-Type = application / octet-stream .

After a bit of online research I came to write:

http.get(url.parse(pdfURL), res => {
    let data = [];
    console.log(res.statusCode);
    res.on('data', chunk => {
        data.push(chunk);
    }).on('end', () => {
        let buffer = Buffer.concat(data);
        console.log(buffer.toString('base64'));
        fs.open(path, 'w', (e, fd) => {
            if (e) throw e;
            fs.write(fd, buffer, 0, buffer.length, null, e => {
                if (e) throw e;
                fs.close(fd, () => console.log('Wrote successfully'));
            });
        });
    });
});

Everything works properly, but when I try to open the generated pdf, it tells me that the file is corrupt and not readable. Any idea what might have been wrong?

Thanks


Edit: I noticed that with postman everything works as it should, so I think the way I treat the binary is wrong

Ok, i got it, I wasn't de-gzipping the response, now works properly

This didn't work for me, tried so many different ways until I found got , an npm library that handles http requests, here's what worked for me:

const stream = require('stream');
const { promisify } = require('util');
const fs = require('fs');
const got = require('got');

const pipeline = promisify(stream.pipeline);

async function downloadImage(url, name) {
  await pipeline(
    got.stream(url),
    fs.createWriteStream(name)
  );
}

More info here: https://bleext.com/post/downloading-images-with-nodejs

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM