Может ли WinInet возобновить загрузку файлов без перезапуска?
Я использую комбинацию InternetSetFilePointer
, а также InternetReadFile
, чтобы поддержать возобновляемую загрузку. Поэтому, когда я начинаю скачивать файл, я проверяю, есть ли у нас его часть, и вызываю InternetSetFilePointer
используя размер того, что у нас есть, и тогда я начинаю читать. Это работает... однако вот мое наблюдение:
Если я скачал 90% файла, и мне потребовалось 2 минуты, когда я возобновлю первый звонок InternetReadFile
Возвращение занимает около 2 минут! Я могу только заключить, что за кулисами, это просто загрузка файла с самого начала, выбрасывая все до точки, которую я дал InternetSetFilePointer
, а затем возвращается со "следующими" данными.
Итак, вопросы:
1) WinInet "симулирует" InternetSetFilePointer
Или это действительно дает эту информацию на сервер?
2) Есть ли способ заставить WinInet действительно перейти к нужной точке поиска, при условии, что HTTP-сервер поддерживает это?
Сервер, с которого я загружаю, является сервером Amazon S3, который, я уверен, на 99,9% поддерживает возобновление.
1 ответ
Надлежащий способ сделать это, наконец, появился в результате расширенного поиска, и вот ссылка на хорошую статью об этом:
http://www.clevercomponents.com/articles/article015/resuming.asp
По сути, для правильного возобновления HTTP необходимо использовать HTTP-заголовок Range, чтобы сервер мог правильно распределить ресурс по вашим запросам.