URLDownloadtofile недокачивает файл
От: C0x  
Дата: 02.11.18 11:54
Оценка:
Использую функцию URLDownloadtofile для загрузки ресурсов (файлы 50-100 мегобайт) из сети на машину пользователя.
У некоторых работает хорошо, а у некоторых загрузка отваливается на 60%-80% с ошибкой. При этом в коде я делаю несколько попыток закачать файл, но загрузка прерывается стабильно.
При этом если пользователь качает сам файл в браузере, все отлично скачивается.
С чем это может быть связано?
Re: URLDownloadtofile недокачивает файл
От: Aniskin  
Дата: 02.11.18 13:06
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>При этом если пользователь качает сам файл в браузере, все отлично скачивается.


Браузеры умеют докачивать файлы при обрыве соединения (если сервер поддерживает). И тебе можно делать тоже самое, благо это можно сделать и на WinInet.

C0x>С чем это может быть связано?


Может быть канал нестабильный?
Re[2]: URLDownloadtofile недокачивает файл
От: C0x  
Дата: 02.11.18 13:24
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Здравствуйте, C0x, Вы писали:


C0x>>При этом если пользователь качает сам файл в браузере, все отлично скачивается.


A>Браузеры умеют докачивать файлы при обрыве соединения (если сервер поддерживает). И тебе можно делать тоже самое, благо это можно сделать и на WinInet.


Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.

C0x>>С чем это может быть связано?


A>Может быть канал нестабильный?


Он как-то уж слишком стабильно нестабильный, что странно. Я уж думал может антивирусы какие-то или фаерволлы блочат. Но тогда и браузер бы врядли скачал бы.
Re[3]: URLDownloadtofile недокачивает файл
От: Aniskin  
Дата: 02.11.18 23:57
Оценка: +1
C0x>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.

Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.
Re[3]: URLDownloadtofile недокачивает файл
От: Mystic Artifact  
Дата: 03.11.18 08:43
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Он как-то уж слишком стабильно нестабильный, что странно. Я уж думал может антивирусы какие-то или фаерволлы блочат. Но тогда и браузер бы врядли скачал бы.

Они (антивирусы и фаерволы) вполне осведомлены о том, кто инициирует соединение. Поэтому если у пользователей стоит какой-то мусор — я б такую идею не отвергал.

Но конечно, лучше бы докачку заиметь на таких объемах.
Re[4]: URLDownloadtofile недокачивает файл
От: C0x  
Дата: 05.11.18 16:51
Оценка:
Здравствуйте, Aniskin, Вы писали:

C0x>>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.


A>Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.


Попробовал, почему-то скачиваемый файл больше на несколько байт оригинала. Сравнил файлы, обнаружил что появились местами лишние \r\n. Вероятно это разделитель чанков при http передаче.
Что с этим можно сделать?
Re[5]: URLDownloadtofile недокачивает файл
От: C0x  
Дата: 05.11.18 16:56
Оценка: +1
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, Aniskin, Вы писали:


C0x>>>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.


A>>Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.


C0x>Попробовал, почему-то скачиваемый файл больше на несколько байт оригинала. Сравнил файлы, обнаружил что появились местами лишние \r\n. Вероятно это разделитель чанков при http передаче.

C0x>Что с этим можно сделать?

Сорри, сам дурак. Пишу файл через fwrite, а открыл как "w+" (текстовый).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.