Какой лучший способ потоковой передачи файлов с помощью ASP.NET?
Для этого существуют различные методы, и я в настоящее время использую метод Response.TransmitFile() внутри обработчика http, который отправляет файл в браузер напрямую. Это используется для различных вещей, включая отправку FLV извне webroot во встроенный Flash-плеер.
Однако это не похоже на надежный метод. В частности, есть странная проблема с Internet Explorer (7), где браузер просто зависает после просмотра видео или двух. Нажатие на какие-либо ссылки и т.д. Не имеет никакого эффекта, и единственный способ заставить вещи снова работать на сайте - закрыть браузер и снова открыть его.
Это также происходит в других браузерах, но гораздо реже. Основываясь на некоторых базовых тестах, я подозреваю, что это связано с тем, как файлы передаются... возможно, соединение не закрывается должным образом или что-то в этих строках.
Попробовав несколько разных вещей, я обнаружил, что для меня работает следующий метод:
Response.WriteFile(path);
Response.Flush();
Response.Close();
Response.End();
Это касается проблемы, упомянутой выше, и просмотр видео больше не приводит к зависанию Internet Explorer.
Тем не менее, я понимаю, что Response.WriteFile() сначала загружает файл в память, и при условии, что некоторые потоковые файлы могут потенциально быть довольно большим, это не похоже на идеальное решение.
Мне интересно узнать, как другие разработчики пересылают большие файлы в ASP.NET и, в частности, потоковые видеофайлы FLV.