Nachfolgend finden Sie meinen TypeScript-Code zum Herunterladen der Datei "Von API"
DownloadLM() {
var ID= sessionStorage.getItem("UserID");
return this.http.get(this.baseurl + 'api/DownloadFiles/DownloadLM/' + ID,
{
headers: {
'Content-Type': 'application/json'
},
responseType: 'arraybuffer'
}
)
.subscribe(respData => {
this.downLoad(respData, this.type);
}, error => {
});
}
downLoad(data: any, type: string) {
var blob = new Blob([data], { type: type.toString() });
var url = window.URL.createObjectURL(blob);
var pwa = window.open(url);
if (!pwa || pwa.closed || typeof pwa.closed == 'undefined') {
alert('Please disable your Pop-up blocker and try again.');
}
}
Dies ist in Ordnung, um die Excel-Datei herunterzuladen, aber sie gibt der Datei einen zufälligen Namen, den ich nicht möchte. Ich möchte den Dateinamen meiner Wahl beim Herunterladen festlegen.
Wo kann ich hier den Dateinamen einstellen? irgendein Eigentum von Blob?
Sie können das Download-Attribut auf den gewünschten Dateinamen setzen, die Href auf die Objekt-URL setzen und dann einfach click aufrufen
var blob = new Blob([data], { type: type.toString() });
var url = window.URL.createObjectURL(blob);
var anchor = document.createElement("a");
anchor.download = "myfile.txt";
anchor.href = blobURL;
anchor.click();
Wenn Sie den genauen Dateinamen der hochgeladenen Datei angeben möchten, legen Sie einen benutzerdefinierten Header des Dateinamens aus dem gesicherten API-Stream fest.
Sie können es wie folgt verwenden: Meine Excel-API-Antwortheader:
content-disposition: inline;filename="salesReport.xls"
content-type: application/octet-stream
date: Wed, 22 Aug 2018 06:47:28 GMT
expires: 0
file-name: salesReport.xls
pragma: no-cache
transfer-encoding: chunked
x-application-context: application:8080
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
Service.ts
Excel(data: any) {
return this.httpClient.post(this.config.domain +
`/api/registration/Excel/download`,data, {observe: 'response', responseType: 'blob'})
.map((res) => {
let data = {
image: new Blob([res.body], {type: res.headers.get('Content-Type')}),
filename: res.headers.get('File-Name')
}
return data ;
}).catch((err) => {
return Observable.throw(err);
});
}
Component.ts
excelDownload (data) {
this.registration.Excel(data).subscribe(
(res) => {
const element = document.createElement('a');
element.href = URL.createObjectURL(res.image);
element.download = res.filename;
document.body.appendChild(element);
element.click();
this.toastr.success("Excel generated successfully");
},
(error) =>{
this.toastr.error('Data Not Found');
});
}