我收到了多个pdf文件,必须从REST-API下载。
在auth和connect之后,我尝试使用request-promise下载文件:
const optionsStart = {
uri: url,
method: 'GET',
headers: {
'X-TOKEN': authToken,
'Content-type': 'applcation/pdf'
}
}
request(optionsStart)
.then(function(body, data) {
let writeStream = fs.createWriteStream(uuid+'_obj.pdf');
console.log(body)
writeStream.write(body, 'binary');
writeStream.on('finish', () => {
console.log('wrote all data to file');
});
writeStream.end();
})
请求创建pdf(大约1-2MB),但我无法打开它。 (Mac预览显示空白页面和adobe show =>
打开此文档时出错。阅读时出现问题 这份文件(14)。
我没有关于下载文件的API端点的信息。只是有这个卷曲:
curl -o doc.pdf --header "X-TOKEN: XXXXXX"
http://XXX.XXX/XXX/docs/doc1
我的错误在哪里?
更新
没有任何经验: - )
答案 0 :(得分:7)
添加编码:'二进制'根据您的要求选择:
const optionsStart = {
uri: url,
method: "GET",
encoding: "binary",
headers: {
"Content-type": "applcation/pdf"
}
};

答案 1 :(得分:2)
将encoding: null
添加到您的请求选项中:
const optionsStart = {
uri: url,
method: "GET",
encoding: null,
headers: {
"Content-type": "application/pdf"
}
};
然后,将响应转换为缓冲区(如有必要):
const buffer = Buffer.from(response);
答案 2 :(得分:1)
尝试
const optionsStart = {
uri: url,
method: 'GET',
headers: {
'X-TOKEN': authToken,
'Content-type': 'applcation/pdf'
},
encodig: null
}
request(optionsStart, (err, resp) => {
let writeStream = fs.createWriteStream(uuid+'_obj.pdf');
writeStream.write(resp.body, 'binary');
writeStream.on('finish', () => {
console.log('wrote all data to file');
});
writeStream.end();
})