如何通过 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"));
});