从 api 响应获取 pdf 文件

Yog*_*rai 8 javascript pdf api node.js

我正在调用 api 并获取 pdf 作为回报。

fetch(`api` + guid, {
   method: "GET",
   headers: {
    "Accept": "application/octet-stream",
    "Authorization": "Bearer " + token,
   },
   responseType: 'arraybuffer',
})
.then((res) => res.text())
.then((data) => {
    fs.writeFileSync('file.pdf', data);
});
Run Code Online (Sandbox Code Playgroud)

我收到了 pdf 文件,但问题是 pdf 文件始终为空。但是当我接受 json 响应时,它工作正常。

我发现了类似的问题,但没有一个解决方案对我有用。

如果有人能指出这个问题那就太好了。

Yog*_*rai 11

我发现了这个问题。因为我使用的是 fetch 而不是 Axios。我们无法将responseType 作为 Fetch 的选项传递。

fetch(`api` + guid, {
   method: "GET",
   headers: {
    "Accept": "application/octet-stream",
    "Authorization": "Bearer " + token,
   },
   // responseType: 'arraybuffer' //#1 remove this,
})
Run Code Online (Sandbox Code Playgroud)

相反,响应本身可以作为数组缓冲区传递,如下所示。

.then((res) => res.arraybuffer())
Run Code Online (Sandbox Code Playgroud)

代替

.then((res) => res.text())
Run Code Online (Sandbox Code Playgroud)

现在不要直接使用响应来编写我们的 pdf 文件。我们可以将数据更改为 base64 字符串,然后再次将其解码以创建 pdf 文件。我使用base64ToPdf npm 包来处理这个问题。

.then(data => {
  var base64Str = Buffer.from(data).toString('base64');
  base64.base64Decode(base64Str, "file.pdf");
})
Run Code Online (Sandbox Code Playgroud)

我希望这对其他人有帮助。:)

  • @spazzola 你能分享一下对你有用的例子吗? (3认同)