perustaja
perustaja

Reputation: 191

How to receive a converted file from microsoft graph api

I'm having a problem saving a pdf I am receiving from microsoft graph api. I am making the following call using the configuration I construct:

const convertConfig = {
    headers: {
        Authorization: <my token>
    }
};
convertConfig.headers['Content-Type'] = 'application/pdf';
const convertRes = await axios.get(`https://graph.microsoft.com/v1.0/<myTenantId>/sites/<mySite>/drive/root:/<myPath>:/content?format=pdf`, convertConfig);
{
  status: 200,
  statusText: 'OK',
   
  ... // snipped data 

  data: <pdf data here as a string in the form 
    '%PDF-1.7\r\n' +
    '%����\r\n' +
    '1 0 obj\r\n' +...>
}

However, when manually saving this file or uploading it, the pdf ends up blank but with the proper amount of pages. For instance, I can save it like so:

fs.writeFileSync('some.pdf', convertRes.data);

and the resulting pdf saved is just blank white pages.

Here's my main question, somewhere I am misusing this data or not asking for something properly because when I make the request using postman the response actually has the content!

params headers

Is there something I am not including in the call or something I'm not doing to the data to handle it properly as pdf data?

Upvotes: 0

Views: 680

Answers (1)

Danstan
Danstan

Reputation: 1781

The response that you get is a stream which you can pipe to the file system. Here is how to do it using Axios.

const writer = fs.createWriteStream('file.pdf');

axios({
    method: 'get',
    url: 'https://graph.microsoft.com/v1.0/sites/site-id/drive/root:/file.docx:/content?format=pdf',
    responseType: 'stream',
    headers: {
        Authorization: "eyJ0..."
    }
}).then(response => {
    response.data.pipe(writer);
});

Upvotes: 1

Related Questions