request-promise download pdf file
17,832
Solution 1
Add encoding: 'binary' to your request options:
const optionsStart = {
uri: url,
method: "GET",
encoding: "binary", // it also works with encoding: null
headers: {
"Content-type": "application/pdf"
}
};
Solution 2
Add encoding: null
to your request options:
const optionsStart = {
uri: url,
method: "GET",
encoding: null,
headers: {
"Content-type": "application/pdf"
}
};
Then, turn the response into a Buffer (if necessary):
const buffer = Buffer.from(response);
Solution 3
try this
const optionsStart = {
uri: url,
method: 'GET',
headers: {
'X-TOKEN': authToken,
'Content-type': 'application/pdf'
},
encoding: null
}
request(optionsStart, (err, resp) => {
let writeStream = fs.createWriteStream(uuid + '_obj.pdf');
writeStream.write(resp.body, 'binary');
writeStream.on('finish', () => {
console.log('wrote all data to file');
});
writeStream.end();
})
Related videos on Youtube
Author by
Ckappo
Updated on September 16, 2022Comments
-
Ckappo over 1 year
I received multiple pdf files and must download it from a REST-API.
After auth and connect I try to download the file with request-promise:
const optionsStart = { uri: url, method: 'GET', headers: { 'X-TOKEN': authToken, 'Content-type': 'applcation/pdf' } } request(optionsStart) .then(function(body, data) { let writeStream = fs.createWriteStream(uuid+'_obj.pdf'); console.log(body) writeStream.write(body, 'binary'); writeStream.on('finish', () => { console.log('wrote all data to file'); }); writeStream.end(); })
The request create a pdf (approximately 1-2MB) but I can't open it. (Mac Preview show blank pages and adobe show = >
There was an error opening this document. There was a problem reading this document (14).
I have no information about the API Endpoint where I download the files. Just have this curl:
curl -o doc.pdf --header "X-TOKEN: XXXXXX" http://XXX.XXX/XXX/docs/doc1
Where is my mistake?
Update:
I opened the file in edit and the file looks like that:
Don't have any experience with that :-)
-
Bora M. Alper about 6 yearsIf
encoding: "binary"
doesn't work tryencoding: null
! -
Manohar Reddy Poreddy almost 6 years@boramalper I had excel sheet (.xlsx), null worked perfectly, thank you a lot!
-
TadeoArmenta over 5 years@BoraM.Alper null works perfect with encryption keys on .dat format
-
Ben McCann about 5 yearsIf you set
encoding: null
then you do not need to doBuffer.from(response)
since the response will already be a buffer