javascript - 从 api 响应中获取 pdf 文件

标签 javascript node.js api pdf

我正在调用 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);
});
我得到了 pdf 文件,但问题是 pdf 文件总是空的。但是当我接受响应为 json 时,它工作正常。
我发现了类似的问题,但没有一个解决方案对我有用。
如果有人能指出这个问题,那就太好了。

最佳答案

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

fetch(`api` + guid, {
   method: "GET",
   headers: {
    "Accept": "application/octet-stream",
    "Authorization": "Bearer " + token,
   },
   // responseType: 'arraybuffer' //#1 remove this,
})
相反,响应本身可以作为数组缓冲区传递,如下所示。
.then((res) => res.arraybuffer())
代替
.then((res) => res.text())
现在代替直接使用响应来编写我们的 pdf 文件。我们可以将数据更改为 base64 字符串并再次解码以创建我们的 pdf 文件。我用了 base64ToPdf npm 包来处理它。
.then(data => {
  var base64Str = Buffer.from(data).toString('base64');
  base64.base64Decode(base64Str, "file.pdf");
})
我希望这对其他人有帮助。 :)

关于javascript - 从 api 响应中获取 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64859031/

相关文章:

javascript - 如何使执行 Javascript 代码的按钮有自己的 URL

javascript - 错误 : Can't set headers after they are sent in express-fileupload

php 读取 RSS 提要时无法读取 <a10 :content type ="text/xml"> tag

javascript - 这个特定结构有名称吗?

JavaScript 计数器不工作

javascript - 映射具有未知长度和未知键名称的对象数组

javascript - Node.js 请求数据损坏

javascript - 输入行前面的前缀

php - 通过单击网页上的按钮运行/执行 CasperJS 脚本

java - 使用 Gson 在 Java 中反序列化 RouteXL 响应很困难,因为 RouteXL 返回多个对象而不是数组