0

After personalizing the content, I am creating an excel sheet with the following code in NodeJs

workbook.save(function (ok) {
   if (!ok)
       workbook.cancel();
   else
       console.log('Workbook saved successfully');

This saves the workbook on my server side successfully. Now I want to send this to the Angular client side. I try to send it with the following code:

__parentDir = path.dirname(process.mainModule.filename);
res.sendFile(__parentDir + '/timesheet.xlsx');

When I run it in the browser, the file is downloading successfully. But when I run it in Postman, I get the response like :

�~nL_rels/PK�~nL    docProps/PK �~nLxl/PK �~nL  xl/_rels/PK �~nL xl/theme/PK �~nLxl/worksheets/PK

Does this means the file is corrupted? If so how it is downloading properly in the browser? If it is not corrupted, then why it is not downloading in the angular code? I am trying to download it through the following code in Angular:

downloadType1(record) {
console.log(record._id);
const _this = this;
_this.appService
  .downloadTimeSheet(record._id)
  .subscribe(data => {
    console.log(data['data']);
    var urlCreator = window.URL;
    if (urlCreator) {
      var blob = new Blob([data], { type: 'application/octet-stream' });
      var url = urlCreator.createObjectURL(blob);
      var a = document.createElement("a");
      document.body.appendChild(a);
      a.href = url;
      a.download = "download.xlsx"; 
      a.click();
      window.URL.revokeObjectURL(url);
    }
  }),
  error => console.log("Error downloading the file."),
  () => console.info("OK");
}

I don't know what I am doing wrong. I have to change the code on my server side (Node) or client side(Angular)?

0

1 Answer 1

1

You need to set a responseType and http header before making a get call as follows :

------------------------- ### -----------------
let getfileheaders = new HttpHeaders().set('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

return this.http.get(this.getappsecdesignfileurl, {responseType: 'blob', headers: getfileheaders});

This is important part : {responseType: 'blob', headers: getfileheaders}

Reference this link : How to download an excel (xlsx) file using Angular 5 HttpClient get method with Node/Express backend?

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.