如何通过 REST API 调用保存 PDF
How to save a PDF from an REST API call
我正在通过 axios 向服务器发送请求。作为回应,我从服务器获得了这段代码。我认为这是缓冲区类型的东西。对此一无所知。
%PDF-1.3\n' +
'%����\n' +
'1 0 obj\n' +
'<<\n' +
' /CreationDate (D:20201204055104Z)\n' +
' /ModDate (D:20201204055104Z)\n' +
'>>\n' +
'endobj\n' +
'2 0 obj\n' +
我想将此回复保存为 pdf 格式。我试过这段代码,但它只会生成空白的 pdf 文件。
这是我的代码
const url = "https://api-stage-starfleet.delhivery.com/package/DL000246845CN/shipping-label";
// Headers config
const config = {
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
}
}
axios.get(url, config)
.then((response) => {
fs.writeFile("output.pdf", response.data, function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
});
})
.catch((err) => {
console.log(err);
})
我也尝试过在 header object 中添加编码。但它不起作用,只生成空白 pdf。谁能帮我解决这个问题。
默认情况下,axios 将使用字符串作为其响应类型。为了告诉它使用二进制数据,而不是你传递一个名为 responseType
:
的配置
const config = {
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
},
responseType: 'buffer'; // <-- Here -----
}
然后,您的 writeFile
就可以工作了,但请注意,将 axios 的响应通过管道传输到文件效率要高得多:
axios({
method: "get",
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
},
responseType: "stream"
}).then(function (response) {
response.data.pipe(fs.createWriteStream("output.pdf"));
});
我正在通过 axios 向服务器发送请求。作为回应,我从服务器获得了这段代码。我认为这是缓冲区类型的东西。对此一无所知。
%PDF-1.3\n' +
'%����\n' +
'1 0 obj\n' +
'<<\n' +
' /CreationDate (D:20201204055104Z)\n' +
' /ModDate (D:20201204055104Z)\n' +
'>>\n' +
'endobj\n' +
'2 0 obj\n' +
我想将此回复保存为 pdf 格式。我试过这段代码,但它只会生成空白的 pdf 文件。 这是我的代码
const url = "https://api-stage-starfleet.delhivery.com/package/DL000246845CN/shipping-label";
// Headers config
const config = {
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
}
}
axios.get(url, config)
.then((response) => {
fs.writeFile("output.pdf", response.data, function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
});
})
.catch((err) => {
console.log(err);
})
我也尝试过在 header object 中添加编码。但它不起作用,只生成空白 pdf。谁能帮我解决这个问题。
默认情况下,axios 将使用字符串作为其响应类型。为了告诉它使用二进制数据,而不是你传递一个名为 responseType
:
const config = {
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
},
responseType: 'buffer'; // <-- Here -----
}
然后,您的 writeFile
就可以工作了,但请注意,将 axios 的响应通过管道传输到文件效率要高得多:
axios({
method: "get",
headers: {
'Accept': 'application/pdf',
'id_token': id_token,
'Authorization': auth_token,
},
responseType: "stream"
}).then(function (response) {
response.data.pipe(fs.createWriteStream("output.pdf"));
});