Stevan Tosic
Stevan Tosic

Reputation: 7209

NodeJS sendFile return empty file from server

Server Side

I trying to send file from NodeJs

/**
 * Exports data to PDF format route.
 */
app.post('/export/pdf', upload.single('imageBlob'),  function (request, response) {
  var PDF = require('./services/PdfService').PDF;
  var fileUrl = PDF.generatePDFExport(request.body, request.file.buffer);

  setTimeout(() => {
    response.sendFile(fileUrl);
  }, 200);
});

This piece of code creates a valid pdf file (I can open it browsers URL hit file)

But some browser hides the pop-up window and I wanted to download a file instead of opening it.

I check response in client and it is some BLOB looking response.

Client Side

I try to create a file from the response but there is only an empty pdf file.

return axios.post('http://172.18.0.2:8001/export/pdf', formData).then(response => {
  let  blob = new Blob([response.data]);
  FileSaver.saveAs(blob, "st-seatmap-shop.pdf");
 })

What is a mistake here? On the server side with a sending file or on the client with saving file?

Upvotes: 1

Views: 1230

Answers (1)

Stevan Tosic
Stevan Tosic

Reputation: 7209

The only problem was in sending a request to the server.

Server by default returns stream and for saving file on client response needs to be a BLOB so I just updated request.

let requestOptions = {
  responseType: 'blob'
};

return axios.post('http://172.18.0.2:8001/export/pdf', formData, requestOptions).then(response => {
  let  blob = new Blob([response.data]);
  FileSaver.saveAs(blob, "st-seatmap-shop.pdf");
}).catch(error => {
  console.log("error.response is : ", error);
});

Upvotes: 2

Related Questions