typescript - Ladda ner Excel-fil med exakt filnamn i Angular
Hur laddar jag ner en Excel-fil med det filnamn som returneras av tjänsten i min Angular-applikation? Jag använder file-saver-biblioteket. Här är min kod:
let blob = new Blob([response], {type: 'application/vnd.openxmlformat-officedocument.spreadsheetml.sheet;'});
saveAs(blob, 'hello.xlsx');
Detta är svaret från Angular-tjänsten:
return this.http.get(`${this.reportsUrl}`, { responseType: 'blob'});
Svar från min backend-tjänst (Spring MVC). excelCreatedResource är av typen org.springframework.core.io.Resource:
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + excelCreateResource.getFilename() + "\"")
.body(excelCreateResource);
Jag vill inte tillhandahålla hello.xlsx. Istället vill jag bara ladda ner filen utan att ändra filnamnet som returneras av tjänsten. Om jag får åtkomst till URL:en direkt från webbläsaren kan jag ladda ner Excel-filen.
Svar #1
Enligt din fråga tror jag att du behöver observera hela svaret och hämta headerdetaljerna från det. I Angular kan du göra detta genom att använda
let observable$ = this.http.get(`${this.reportsUrl}`, { observe: 'response'});
observable$.subscribe(response => {
let blobObj = response.body; // this should be your blob object (body of response)
let headers = response.Headers //This is a disctionary/HashMap were you'll find the content-desposition header
//.....
})
Svar #2
Om excelCreateResource.getFilename(); returnerar ett filnamn, kan du lagra filnamnet i en lokal variabel och skicka denna variabel i saveAs()-metoden som:
var filename = excelCreateResource.getFilename();
saveAs(blob, filename );
Kanske det fungerar för dig.
