Один из подходов, который вы могли бы рассмотреть, - это управление загрузкой с использованием заголовка ответа HTTP / 1.1 Acccept-Ranges
и заголовка запроса Range
.
Убедитесь, что загружаемый ресурс будет содержать заголовок: -
Accept-Ranges: байты
при запросе (статический файл, отправленный IIS, сделает это по умолчанию).
Теперь с помощью ClientHTTPВ стеке вы делаете начальный запрос "HEAD", чтобы определить, что сервер примет заголовок Range: bytes=
в запросе и найдет общий размер отправляемого контента.
Затем вы делаете запрос "GET" дляресурс, включающий заголовок: -
Диапазон: байты = 0-65535
Это ограничивает загружаемый контент только первым фрагментом 64 КБ.Затем вы повторяете тот же запрос с: -
Диапазон: байты = 65536-131071
Каждый раз, когда вы можете сохранить содержимое потока ответов в файл назначения.Вы отслеживаете, сколько байтов вы получили.Когда вы определяете окончательный фрагмент, который, вероятно, будет меньше, чем полный, просто используйте заголовок, например: -
Диапазон: байты = 131072-
Это будет читать до концафайла.
Если запросы к серверу не выполняются, вы можете возобновить работу с соответствующей точки в этой последовательности.
Вы должны быть изящны, если сервер не включает Accept-Ranges
заголовок в исходном запросе "HEAD", тогда вам просто нужно загрузить весь файл.