WebAPI und angular JS Excel-Datei herunterladen - Datei beschädigt

8

Ich erstelle eine Excel-Datei in meiner WebAPI. Ich "speichere" es in einem Gedächtnisstrom und gebe dann die Antwort wie folgt ein:

%Vor%

Es sieht so aus, als ob die Serverseite korrekt funktioniert. Wenn ich diesen Speicherstream in einen Dateistream schreibe, wird die Datei erstellt und kann ohne Probleme geöffnet werden.

Auf der eckigen Seite, wie kann ich die Datei neu erstellen, wenn ich auf eine Schaltfläche klicke?

Ich habe so etwas versucht:

%Vor%

Die Datei wird erstellt, aber als ich versucht habe, sie zu öffnen, ist sie beschädigt ... Ich habe versucht, den Datentyp in vnd.ms-excel in angular zu ändern, aber es hat nicht funktioniert ... Wie kann ich die Datei per Klick herunterladen?

BEARBEITEN Nachdem Jorg geantwortet habe, habe ich Folgendes versucht: Was die API zurückgibt, ist:

%Vor%

Von dem, was ich sehen kann, sieht es richtig aus.

Auf der Client-Seite:

%Vor%

Eine Excel-Datei wurde erstellt, ist aber immer noch beschädigt ...

Danke

    
user2522221 02.09.2014, 00:15
quelle

2 Antworten

16

Ich hatte das gleiche Problem. Die Datei war auf der Serverseite OK, aber beim Herunterladen wurde sie beschädigt.

Was es für mich gelöst hat, war responseType: "arraybuffer" zur Serveranfrage hinzuzufügen.

Dann beim Aufruf dieser Zeile var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;' }); Die Variable data sollte vom Typ ArrayBuffer sein und keine Zeichenfolge.

    
daniel 26.01.2015 10:27
quelle
1

Das Hauptproblem rührt von der Tatsache her, dass XMLHttpRequest standardmäßig den Standardantworttyp verwendet, der ein leerer String ist. Sehen Sie sich diesen Link an. Ihre Binärdaten werden daher nicht korrekt behandelt.

Bei der Verwendung der JavaScript-API müssen Sie auf den Antworttyp für binäre Daten achten. Andernfalls wird es als String interpretiert.

API wie angular-Datei-Upload (letzte Version ist derzeit 1.1.5) zum Beispiel bietet nicht die Möglichkeit, den Antworttyp von Daten nach einem Upload erhalten eingestellt. Ich musste die API aktualisieren, um den Antworttyp zu definieren.

    
J.M. Kenny 13.03.2015 09:26
quelle