В прошлом я использовал пользовательские обработчики http для предоставления этой функции. Я создал файл download.axd и написал простой HttpHandler.
public class DownloadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// Do some logging to track stats.
// Set some custom response headers
context.Response.TransmitFile(filename);
}
}
Важной особенностью метода TransmitFile является то, что он передает файл в ответ без необходимости сохранять файл в памяти. Это будет важно в вашем случае, так как вы имеете дело с большими файлами.
Вам также необходимо зарегистрировать обработчик в вашем файле web.config:
<httpHandlers>
<add verb="GET,HEAD" path="download.axd" type="DownloadHandler, MyAssemby"/>
</httpHandlers>
По-прежнему используя этот подход, будет трудно отследить фактические байты, отправленные каждому загружаемому человеку.