gpt4 book ai didi

javascript - Node (Express) - 尝试通过 API 调用保存 PDF

转载 作者:行者123 更新时间:2023-11-30 11:40:20 27 4
gpt4 key购买 nike

我已经尝试了各种方法来让它发挥作用。我正在尝试从 Node 上的 API 请求 PDF,然后将其发送回最初调用它的客户端。

目前我只想在 Node 服务器上成功保存并查看 PDF。

问题是当我打开 PDF 文件时它始终是空的(即使它的大小为 30kb)。

基本流程是这样的(删除了一些位,但下面的代码可以正常工作并返回 PDF)

// We pass through session ID's, request dates etc through in body
app.post("/getPayslipURL", function(client_request, res) {

// create request, which will simply pass on the data to the database (In order to get the NI number we need for the pay API)
const NI_NUMBER_REQUEST = db_api.createRequestTemplate({
body: JSON.stringify(client_request.body)
});

// Create a chain of HTTPS Requests, Starting with our call to the DB
requestPromise(NI_NUMBER_REQUEST)
.then((db_response) => {
const PAY_API_OPTIONS = /*Code to generate options based on furhter DB info (Includes dates etc)*/
return requestPromise(PAY_API_OPTIONS); // Call pay API
})
.then((pay_pdf_data) => {

console.log(typeof pay_pdf_data); // It's a string
// At this point I can log pay_pdf_data, But if I try to save it to file it's always empty
// No matter how I encode it etc

fs.writeFile("./test.pdf", pay_pdf_data, 'binary', function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});

})
.catch(err => `Error caught: ${console.log}`) // Catch any errors on our request chain
});
}

我尝试过使用/不使用二进制标志进行保存,正如其他帖子中建议的那样,在文件保存以及请求本身中进行保存。也尝试过各种类型的解码方法,我总是得到一个空的PDF保存。

我的返回数据看起来像这样(更大,当保存为 test.pdf 时,我得到一个 30kb 文件,如前面提到的)

%PDF-1.4%���� 1 0 对象 0 对象<

我发现一篇文章说关于通过管道传输数据,我感觉我的 pdf_data 在转换为字符串时已损坏

有什么想法我将如何使用当前设置来执行此操作吗?

e/RequestPromise 是一个库,如果更容易的话也可以使用标准请求库

https://github.com/request/request-promise - https://github.com/request/request

谢谢!

最佳答案

您的代码不起作用,因为底层 request 库(由 request-promise 使用)需要将选项 encoding 设置为 null 对于二进制数据 - 请参阅 https://github.com/request/request#requestoptions-callback .

以下是使用该模块下载二进制数据的方法 -

app.post("/getPayslipURL", function(client_request, res) {
const NI_NUMBER_REQUEST = db_api.createRequestTemplate({
body: JSON.stringify(client_request.body),
encoding: null
});

requestPromise(NI_NUMBER_REQUEST)
.then((db_response) => {
const PAY_API_OPTIONS = /*Code to generate options based on furhter DB info (Includes dates etc)*/
return requestPromise(PAY_API_OPTIONS); // Call pay API
})
.then((pay_pdf_data) => {
fs.writeFile("./test.pdf", pay_pdf_data, 'binary', (err) => {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
})
.catch(err => `Error caught: ${console.log}`) // Catch any errors on our request chain
});
}

关于javascript - Node (Express) - 尝试通过 API 调用保存 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com