Ich habe eine Website, wo ein Benutzer eine Datei herunterladen kann. Einige Dateien sind extrem groß (die größte ist 323 MB). Wenn ich es teste, um diese Datei herunterzuladen, erhalte ich eine Ausnahme wegen zu wenig Speicher. Der einzige Weg, wie ich die Datei herunterladen kann, ist unten. Der Grund, warum ich den folgenden Code verwende, ist, dass die URL codiert ist und ich den Benutzer nicht direkt mit der Datei verknüpfen lassen kann. Gibt es eine andere Möglichkeit, diese Datei herunterzuladen, ohne das Ganze in ein Byte-Array einlesen zu müssen?Besserer Weg, um eine Binärdatei herunterzuladen?
FileStream fs = new FileStream(context.Server.MapPath(url), FileMode.Open,
FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(context.Server.MapPath(url)).Length;
byte[] bytes = br.ReadBytes((int) numBytes);
string filename = Path.GetFileName(url);
context.Response.Buffer = true;
context.Response.Charset = "";
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.ContentType = "application/x-rar-compressed";
context.Response.AddHeader("content-disposition", "attachment;filename=" + filename);
context.Response.BinaryWrite(bytes);
context.Response.Flush();
context.Response.End();
Ich werde die offensichtliche Frage stellen: Können Sie einen festen Chunk aus dem BinaryReader in einer Schleife lesen und in Response.BinaryWrite schreiben? Ich sehe keinen Grund, warum Sie die gesamte Datei als eine einzige Operation in den Speicher einlesen müssen. – Joe