Tengo un sitio donde un usuario puede descargar un archivo. Algunos archivos son extremadamente grandes (el más grande es 323 MB). Cuando lo pruebo para intentar descargar este archivo recibo una excepción de falta de memoria. La única forma que conozco para descargar el archivo está debajo. La razón por la que uso el código a continuación es porque la URL está codificada y no puedo permitir que el usuario se vincule directamente con el archivo. ¿Hay alguna otra forma de descargar este archivo sin tener que leer todo en una matriz de bytes?¿Mejor manera de descargar un archivo binario?
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();
Haré la pregunta obvia: ¿puedes leer un fragmento fijo del BinaryReader en un bucle, escribiéndolo en Response.BinaryWrite? No veo ningún motivo por el que necesite leer todo el archivo en la memoria como una sola operación. – Joe