Node.js下载二进制八位字节流

时间:2019-11-14 22:06:32

标签: node.js http pdf http-headers mime

我正尝试从服务器下载(意味着在服务器上创建文件实例).pdf文件,并将其以二进制格式返回给我,并具有: Content-Type = application / octet-stream

经过一些在线研究,我开始写:

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'));
            });
        });
    });
});

一切正常,但是当我尝试打开生成的pdf时,它告诉我文件已损坏且不可读。 知道有什么问题吗?

谢谢


编辑: 我注意到邮递员一切正常,所以我认为我对待二进制文件的方式是错误的

2 个答案:

答案 0 :(得分:0)

好吧,我明白了, 我没有对响应进行解压缩,现在可以正常工作

答案 1 :(得分:0)

这对我不起作用,尝试了许多不同的方法,直到我发现got(一个处理http请求的npm库),这对我有用:

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)
  );
}

此处有更多信息:https://bleext.com/post/downloading-images-with-nodejs