Ответ TransmitFile - PullRequest
       15

Ответ TransmitFile

3 голосов
/ 03 декабря 2009

У меня есть следующий код доставки файла пользователям, когда они нажимают на ссылку для скачивания. В целях безопасности я не могу просто ссылаться на файл напрямую, поэтому он был настроен для декодирования URL-адреса и передачи файла.

Некоторое время он работал нормально, но недавно у меня возникли проблемы, когда файл начнет загружаться, но нет никаких указаний на его размер.

Из-за этого, когда загрузка должна остановиться, это не так.

Файл имеет размер около 99 МБ, но когда я загружаю его, браузер просто продолжает загружать его за пределы 100 МБ. Я не знаю, что он скачивает, но если я не отменю его, он не остановится.

Итак, мой вопрос: есть ли альтернатива TransmitFile или способ убедиться, что размер файла отправляется так, чтобы он останавливался в нужное время?

Вот код:

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.TransmitFile(context.Server.MapPath(url));
context.Response.Flush(); 

Я не хочу использовать WriteFile, потому что я не хочу загружать весь файл в память, так как он очень большой.

Спасибо.

1 Ответ

2 голосов
/ 03 декабря 2009

Я думаю, что нашел ответ.

Я добавил следующий код, и теперь, по крайней мере для меня, он сообщает правильный размер файла и работает как положено.

FileInfo OutFile = new FileInfo(context.Server.MapPath(url));
long filesize = OutFile.Length; 
....
context.Response.AddHeader("Content-Length", filesize.ToString());
...