Wie gebe ich eine MemoryStream docx-Datei MVC zurück?

7

Ich habe eine docx-Datei, die ich zurückgeben möchte, nachdem ich Änderungen vorgenommen habe. Ich habe den folgenden Code ...

%Vor%

Die Datei scheint in Ordnung zu sein, aber ich erhalte Fehlermeldungen ("Die Datei ist beschädigt" und eine andere besagt "Word hat nicht lesbaren Inhalt gefunden. Wenn Sie der Quelle vertrauen, klicken Sie auf Ja"). Irgendwelche Ideen?

Vielen Dank im Voraus

BEARBEITEN

Dies ist die ChangeFile in meinem Modell ...

%Vor%     
MrM 31.01.2013, 16:20
quelle

2 Antworten

13

Ich verwende ein FileStreamResult :

%Vor%     
Parker 31.01.2013 16:33
quelle
6

Verwenden Sie nicht MemoryStream.GetBuffer().ToArray() use MemoryStream.ToArray() .

Der Grund dafür ist, dass sich GetBuffer() auf das Array bezieht, das zum Erstellen des Speicherstroms verwendet wurde, und nicht auf die tatsächlichen Daten im Speicherstream. Das darunterliegende Array könnte tatsächlich in der Größe variieren.

Versteckt auf MSDN:

  

Beachten Sie, dass der Puffer zugeordnete Bytes enthält, die möglicherweise nicht verwendet werden.   Zum Beispiel, wenn die Zeichenfolge "test" in den MemoryStream geschrieben wird   Objekt, die Länge des von GetBuffer zurückgegebenen Puffers ist 256, nicht   4, mit 252 Bytes unbenutzt. Um nur die Daten im Puffer zu erhalten, verwenden Sie   die ToArray-Methode; ToArray erstellt jedoch eine Kopie der Daten in   Speicher.

    
Lloyd 31.01.2013 21:44
quelle