将PDF二进制数据编码到base64不能与NodeJS一起使用

Loa*_*... 4 javascript pdf encode node.js

我正在尝试获取来自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)
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式解析为base64:

console.log(typeof body); // STRING
const encoded = new Buffer.from(body).toString('base64'); //PDF NOT WORKING
Run Code Online (Sandbox Code Playgroud)

但是当我得到这个base64并将其嵌入到html上时它表示该文件无法被禁用,当我尝试将其保存为.PDF文件时,会发生同样的事情.

当我尝试解析为base64相同的pdf但这次从下载的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
  });
Run Code Online (Sandbox Code Playgroud)

我正在使用const request = require('request');这些请求.

h0x*_*91B 7

当您提出请求时,您应该将选项编码设置为null以获取Buffer而不是String.

request({
    method: 'GET',
    encoding: null,
    uri: 'http://youdomain.com/binary.data'
}, (err, resp, data)=>{
    console.log(typeof data) //should be an Object
    console.log(data.toString('base64'))
})
Run Code Online (Sandbox Code Playgroud)

  • 使用 axios,我设置了 `responseType: 'arrayBuffer'` 和 `responseEncoding: 'binary'`。现在可以了。无论如何,谢谢你,你的回答指明了方向。 (3认同)
  • 这对我有用!! 谢谢!!:) (2认同)