Mam witrynę, w której użytkownik może pobrać plik. Niektóre pliki są bardzo duże (największe to 323 MB). Kiedy testuję to, aby spróbować pobrać ten plik, otrzymuję wyjątek z pamięci. Jedyny znany mi sposób pobrania tego pliku znajduje się poniżej. Powodem, dla którego używam poniższego kodu jest to, że adres URL jest zakodowany i nie mogę pozwolić użytkownikowi na bezpośrednie połączenie z plikiem. Czy istnieje inny sposób na pobranie tego pliku bez konieczności odczytywania całości w tablicy bajtów?Lepszy sposób na pobranie pliku binarnego?
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();
Zadam oczywiste pytanie: czy możesz odczytywać ustaloną porcję z BinaryReader w pętli, wypisując ją do Response.BinaryWrite? Nie widzę powodu, dla którego musisz przeczytać cały plik do pamięci jako jedną operację. – Joe