javascript - 从 api 响应正文中保存 pdf 文件 - pdf 保存为空白文件
问题描述
我正在使用 nodejs v15 进行 api 自动化,其中我得到一个缓冲区作为响应正文,我需要在本地保存为 PDF 文件。我能够创建一个名为“pdf123.pdf”的 pdf 文件,它有 8kb 和 2 页,这是预期的。我有 2 个概率语句问题 1 - 当我打开保存的 pdf 文件时,它显示 2 个空白页。内容不见了。我也尝试过 encoding = null 和“二进制”。没有按预期工作。(代码如下)
API response.body 如下所示 "%PDF-1.4\n%����\n1 0 obj\n<<\n/Type /Catalog\n/Version /1.5\n/Pages 2.....
let request = require('request-promise');
var api = "/report/download/request1";
var auth = "Basic ####";
var args = {
headers: {
"content-type": "application/pdf",
"Authorization": auth,
},
encoding: "binary"
}
return new Promise((resolve, reject) => {
return webApi.restCall(api, "GET", args.data, args.headers).then((response) => {
let writeStream = fs.createWriteStream('pdf123.pdf');
writeStream.write(response.body, 'binary');
writeStream.on('finish', () => {
console.log('wrote all data to file');
});
writeStream.end();
resolve("Resolved")
}).catch((err) => {
reject("API call failed");
})
})
}
解决方案
我遇到了同样的问题,除了我需要在新的浏览器选项卡中打开 PDF。我看到了同样的行为——它会以 PDF 格式打开一个新标签,页数正确,但所有页面都是空白的。我终于让它工作了,然后我为你的用例调整了我的代码。请注意,我使用的是 axios,但 AFAIK 的结果不应该有任何差异。
function getPDFandWriteToFile() {
var api = "/report/download/request1";
var auth = "Basic ####";
var config = {
method: 'get',
url: api,
responseType: 'arraybuffer',
headers: {
'Authorization': auth,
},
}
return new Promise((resolve, reject) => {
axios(config)
.then((response) => {
let writeStream = fs.createWriteStream('pdf123.pdf')
writeStream.once('open', (fd) =>{
writeStream.write(new Buffer.from(response.data, 'binary'))
writeStream.on('finish', () => {
console.log('wrote all data to file');
});
writeStream.end()
})
resolve(response);
},
(error) => {
console.log(error);
reject(error)
}
);
});
}
推荐阅读
- sql-server - 创建链接 ID
- excel - ExCel (Office 365) 的默认打开模式是否可配置?
- php - 加入同一张表的两个 SQL 选择查询并过滤
- r - 仅随机抽样 R 中的数据子集
- python - 使用 Cloudera Manager API 永久禁用服务
- javascript - SonarQube 不添加 JavaScript 覆盖率
- html - 使用多值颜色 scss
- http - Tensorflow Serving:需要向仅接受 gRPC 请求的 TF Server 发出 HTTP 请求
- javascript - 在反应中定义属性的最佳实践是什么?
- ruby-on-rails - 为什么我的 rails 应用程序中的所有 javascript 文件都被放入单个 js 文件中