Это ясный и простой пример, демонстрирующий, как загружать файлы в ASP.NET Core с индикатором выполнения без использования сторонних клиентских технологий (например, Flash):

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

Мы будем использовать вариант 5 из моей предыдущей публикации Загрузка файлов с помощью ASP.NET Core: какие у нас есть возможности? В качестве основы, чтобы сэкономить время.

На стороне клиента нам нужно немного изменить функцию uploadFiles, чтобы появился индикатор выполнения:

Как видите, сама функция почти такая же, мы только добавили вызовы функций startUpdatingProgressIndicator и stopUpdatingProgressIndicator. Функция startUpdatingProgressIndicator запускает таймер, который обновляет индикатор выполнения, отправляя запросы AJAX серверу каждые 10 миллисекунд для получения текущего значения прогресса.

Серверная часть тоже почти такая же, но здесь мы добавили простую логику для расчета текущего прогресса и еще одно действие для получения рассчитанного проекта со стороны клиента:

Для этого поста я создал демонстрационный проект. Не стесняйтесь спрашивать, если у вас есть вопросы!