Was ist der beste browserübergreifende Weg, um einen Download-Dialog zu öffnen (nehmen wir an, wir können content-disposion:attachment in den Headern einstellen), ohne von der aktuellen Seite weg zu navigieren oder Popups zu öffnen, was im Internet Explorer (IE) 6 nicht gut funktioniert.
Antworten
Zu viele Anzeigen?
Gaurav Kunal
Punkte
49
Beste Lösung gemäß der neuen Chrom-Spezifikation https://developers.google.com/web/updates/2018/02/chrome-65-deprecations
Vanille-JavaScript
public static downloadFile(url: string): void {
const xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = () => {
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
const blobUrl = window.URL.createObjectURL(xmlHttp.response);
const e = document.createElement('a');
e.href = blobUrl;
e.download = blobUrl.substr(blobUrl.lastIndexOf('/') + 1);
document.body.appendChild(e);
e.click();
document.body.removeChild(e);
}
};
xmlHttp.responseType = 'blob';
xmlHttp.open('GET', url, true);
xmlHttp.send(null);
}
Wenn Sie Angular verwenden, versuchen Sie dies.
async downloadBrochure(url: string) {
try {
const res = await this.httpClient.get(url, { responseType: 'blob' }).toPromise();
this.downloadFile(res);
} catch (e) {
console.log(e.body.message);
}
}
downloadFile(data) {
const url = window.URL.createObjectURL(data);
const e = document.createElement('a');
e.href = url;
e.download = url.substr(url.lastIndexOf('/') + 1);
document.body.appendChild(e);
e.click();
document.body.removeChild(e);
}
Nicht registrierter Benutzer
Punkte
0
Wie wäre es damit:
<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">
Dieser Weg funktioniert auf allen Browsern (glaube ich) und ermöglicht es Ihnen, eine Nachricht wie: "Wenn der Download nicht in fünf Sekunden beginnt, klicken Sie hier."
Wenn Sie es brauchen, um mit Javascript zu sein... nun...
document.write('<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">');
Mit freundlichen Grüßen
Simon
Punkte
37405
- See previous answers
- Weitere Antworten anzeigen