Обеспечение загрузки на веб-сайте ASP.net - PullRequest
4 голосов
/ 20 мая 2010

Мне нужно обеспечить загрузку больших файлов (более 2 ГБ) на веб-сайте ASP.net. Прошло какое-то время с тех пор, как я сделал что-то подобное (я уже некоторое время живу в мире толстых клиентов) и размышлял над лучшими практиками для этого. В идеале хотелось бы:

  • Чтобы иметь возможность отслеживать статистику загрузок: количество загрузок необходимо; фактические отправленные байты были бы хорошими.
  • Обеспечивать загрузку способом, который "играет хорошо" с сторонними менеджерами загрузки. Многие из наших пользователей имеют ненадежные интернет-соединения, и возможность возобновления загрузки является обязательной.
  • Чтобы позволить нескольким пользователям загружать один и тот же файл одновременно.

Мои загружаемые файлы не чувствительны к безопасности, поэтому предоставление прямой ссылки («щелкните правой кнопкой мыши, чтобы загрузить ...») возможно. Достаточно ли просто предоставить прямую ссылку, позволить IIS ее обработать, а затем использовать какую-либо службу анализа журналов (какие-либо рекомендации?) Для составления и представления статистики? Или мне нужно перехватить запрос на загрузку, сохранить некоторую информацию в базе данных, а затем отправить собственный ответ? Или есть пользовательский элемент управления ASP.net (встроенный или сторонний), который делает это? Я ценю все предложения.

1 Ответ

3 голосов
/ 20 мая 2010

В прошлом я использовал пользовательские обработчики 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...