我正尝试从服务器下载(意味着在服务器上创建文件实例).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时,它告诉我文件已损坏且不可读。 知道有什么问题吗?
谢谢
编辑: 我注意到邮递员一切正常,所以我认为我对待二进制文件的方式是错误的
答案 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