Encoding PDF binary data to base64 not working with NodeJS
encode, javascript, node.js, pdf
Solution
When you make your request you should set option encoding to null for getting `Buffer` instead of `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'))
})
Problem
I'm trying to get a PDF stream return that comes from a API and parse it to base64 to embbed it in the client side, the body of the API request is returning something like this: ``` %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) ``` I'm trying to parse to base64 this way: ``` console.log(typeof body); // STRING const encoded = new Buffer.from(body).toString('base64'); //PDF NOT WORKING ``` But when I'm getting this base64 and embedding it on the html it says that the file can't be oppened, the same thing happens when I trying to save it as .PDF file. When I try to parse to base64 the same pdf but this time from a downloaded pdf, the base64 code when embedded in the html works fine. ``` 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 }); ``` I'm using `const request = require('request');` to make the requests.