【发布时间】:2017-10-13 13:30:02
【问题描述】:
我正在尝试获取来自 API 的 PDF 流返回并将其解析为 base64 以将其嵌入客户端,API 请求的主体返回如下内容:
%PDF-1.5
%����
4 0 obj
<<
/Type/XObjcect
/Subtype/Image
/Width 799
/Height 70
/ColorSpace/DeviceGray
/BitsPerComponent 8
/Filter/FlateDecode
/Length 5181
>>
stream
x���=H#�������A�&�)���B���4iba�&O8H
.
.
.
(The rest was omitted)
我正在尝试以这种方式解析为 base64:
console.log(typeof body); // STRING
const encoded = new Buffer.from(body).toString('base64'); //PDF NOT WORKING
但是当我得到这个 base64 并将其嵌入到 html 时,它说文件无法打开,当我尝试将其保存为 .PDF 文件时也会发生同样的事情。
当我尝试将相同的 pdf 解析为 base64 时,但这次是从下载的 pdf 中,嵌入 html 中的 base64 代码可以正常工作。
fs.readFile('/home/user/downloaded.pdf', function (err, data) {
if (err) throw err;
console.log(typeof data); //OBJECT
const pdf = data.toString('base64'); //PDF WORKS
});
我正在使用const request = require('request'); 提出请求。
【问题讨论】:
-
Typeof
body应该是Buffer而不是字符串,请显示您提出请求的代码。字符串不能包含二进制数据。 -
@h0x91B 感谢您的回答,是的,您是对的,我在请求中添加了“encoding: null”,现在我得到的是缓冲区而不是字符串。我以为把这个字符串解析到缓冲区也可以,我不知道为什么它不起作用。
标签: javascript node.js pdf encode