Download Excel-Datei vom server und speichern auf dem client
Habe ich eine JavaScript-app und einer API, die erstellt eine Excel-Datei und gibt ein byte-array mit dem folgenden Header:
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition:attachment; filename=List.xlsx
Wenn ich die Excel-API-URL-Ressource bin ich aufgefordert, den download der Excel-Datei. Wenn ich also lädt es fein und in Excel geöffnet. Alles ist gut.
Nun zum problem:
Was ich nicht will ist, setzen Sie die API URL in dem browser-Fenster, so dass mein Ziel ist:
- Download der Excel-Datei via AJAX XMLHttpRequest
- Speichern den Inhalt (byte-array) in einen Blob -
- Erstellen Sie eine data-URI mit dem Blob -
- Öffnen Sie die data-URI in einem popup-Fenster, das den Benutzer auffordert, zum download der Excel-Datei
Was ich habe ist dieses:
Es die Datei lädt, aber wenn ich versuche die Datei zu öffnen, kann Excel nicht erkennen, es als eine gültige Excel-Datei.
//"data" is the contents from the server
var reader = new FileReader();
var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
reader.readAsDataURL(blob);
reader.onloadend = function (e) {
window.open(reader.result, 'Excel', 'width=20,height=10,toolbar=0,menubar=0,scrollbars=no', '_blank');
}
- Kommt diese müssen im IE funktioniert?
- Ich habe es gelöst (siehe Antwort unten), aber du hast Recht, der IE dies nicht unterstützt. Kann es sein zur Verfügung gestellt für den IE?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe es funktioniert. Ich musste einfach fügen Sie den folgenden, um meine XMLHttpRequest-Objekt:
Aber es funktioniert nicht im IE, da IE nicht open-data-URIs. Nicht einmal IE11.
Trotzdem fand ich eine große Bibliothek namens FileSaver.js die Griffe speichern von Dateien für alle gängigen Browser (einschließlich IE10+)