2016-03-24 13 views
0

Ich habe Probleme beim Herunterladen einer Datei vom Server.
Das Problem ist, dass das Ende der heruntergeladenen Datei fehlt.Ende des Ergebnisses von BinaryWrite Flush fehlt

Ich habe einige Hinweise auf andere Menschen mit ähnlichen Problemen gefunden, aber nichts, das mir bei meinem Problem hilft.

Beim Debuggen habe ich gelernt, dass die Länge von fileData korrekt ist und alle Daten im Byte-Array beim Aufruf BinaryWrite vorhanden sind.
, dass die BinaryWrite, Flush oder Close Anrufe verlässt ... Ich habe hier über nicht mit Response.End oder Response.Close, zum Beispiel lesen:
HttpResponse.End vs HttpResponse.Close vs HttpResponse.SuppressContent und es scheint wie eine wahrscheinliche Ursache, aber was soll ich verwenden, anstatt (haben versucht, remove Response.Close vollständig, aber das Ergebnis zu viel Datenausgabe)?

Jemand weiß, was dieses Verhalten verursachen könnte, und wie man es beheben kann?

EDIT: Nur mit Response.ContentType = "binary/octet-stream"; versucht und es funktioniert wie ein Charme!
Was ist der Unterschied zwischen text/plain und binary/octet-stream, der ein solches Verhalten verursachen kann?
Es funktioniert auch ohne die Close Aufruf ...

MORE EDIT: Scheint wie Komprimierung von Antworten wurde auf der Server-Seite aktiviert. Offensichtlich scheint es bei reinen Text-Streams ein Problem zu geben, wenn die Komprimierung aktiv ist.

Der Code I ist:

private void DownloadFile(byte[] fileData, string fileName, string fileExtension) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment; filename=" + fileName + fileExtension); 
    Response.AddHeader("Content-Length", fileData.Length.ToString(CultureInfo.InvariantCulture)); 
    Response.ContentType = "text/plain"; 
    Response.BinaryWrite(fileData); 
    Response.Flush(); 
    Response.Close(); 
} 
+0

Response.Flush(); Response.Close(); Antwort.End(); – jackjop

+0

Versucht es, aber keine Würfel ... Jetzt ist es sicher, wie das Hinzufügen eines Aufrufs zu "Ende" helfen würde, da es bereits auf "Schließen" gescheitert ist ... Und in meinem Fall würden "Ende" und "Schließen" dasselbe erzeugen da ich nach dem Anruf nichts mehr zu verarbeiten habe. – Falchion

+0

hmm, vielleicht ist deine Datei zu groß. Kannst du es versuchen? (in der akzeptierten Antwort) http://stackoverflow.com/questions/37650/how-to-implement-a-file-download-in-asp-net – jackjop

Antwort

0

Wenn Kompression auf der Server-Seite (IIS) aktiv ist, es verursacht anscheinend Schwierigkeiten mit text/plain Strömen.

Für Sie mit ähnlichen Problemen, versuchen Sie deaktivieren, könnte es helfen!

Es hat sicherlich für mich getan!

Verwandte Themen