Задать вопрос

Как заставить адекватно работать прогрессбар для httpclient PostAsync?

Есть приложение на C#, в нём используется загрузка файлов на сервер. Проблема в том, что используемый мной httpclient не хочет адекватно отображать процесс загрузки.

Цепляю обработчик так:
handler = new HttpClientHandler();
...
progressHandler = new ProgressMessageHandler();
progressHandler.HttpSendProgress += sendProgress;
progressHandler.HttpReceiveProgress += recvProgress;
...
client = HttpClientFactory.Create(handler, progressHandler);

Сами обработчики состоят из одной строки вывода в консоль. Когда пытаюсь вызвать PostAsync с загрузкой файла, то лог выглядит так:
Net.Send: 40 / total: 5946593
Net.Send: 125 / total: 5946593
Net.Send: 1089 / total: 5946593
Net.Send: 5946549 / total: 5946593
Net.Send: 5946593 / total: 5946593


То есть сам прогрессбар пролетает за секунду, хотя физически файл ещё пару минут заливается. Сам код работает корректно, то есть ничего нигде не сыпется и файл заливается без ошибок. Уже пару дней ищу ответ, пробую различные решения, но пока что безрезультатно. С загрузкой файла на компьютер (download) всё нормально, видно как идёт загрузка по 4-5кб. С upload такого, увы, нет.

(предложения использовать другие компоненты не принимаются, интересно уже разобраться в проблеме)
  • Вопрос задан
  • 840 просмотров
Подписаться 3 Сложный Комментировать
Решения вопроса 1
@Mixxer Автор вопроса
После долгих попыток исправить ошибку, оказалось все очень просто.

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

Вот правильный код:
...
using (var contentData = new MultipartFormDataContent()) {
...
contentData.Add(new StreamContent(File.Open("имяфайла", FileMode.Open)), "file", "filename");
....


Самая важная часть это использование StreamContent. До этого у меня был не он и файл читался и загружался, но прогрессбар летел сразу же.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы