Я хочу загрузить файл с FTP. Если файл небольшой (обычно менее 1000 МБ), он работает. Однако, если файл большой, я получаю EIdReadTimeout. Зачем? Должен ли я поддерживать связь живым? Из того, что я знаю, данные чтения имеют свой собственный канал, поэтому мне не нужно поддерживать связь.Класс исключений EIdReadTimeout с сообщением 'Read timed out' [Indy-IdFTP]
Нечетным является то, что исключение появляется в конце Get (после того, как Get успешно загружает весь файл): FTP.Get (Name, TempGzFile, TRUE, FALSE) !!!!
Документация:
TIdFTP.ReadTimeout - Количество миллисекунд ожидания для ответа протокола FTP.
TIdFTP.TransferTimeout - значение таймаута для операций чтения в канале передачи данных для FTP-сервера .
По умолчанию ReadTimeout установлен на 60сек и TransferTimeout до 10 секунд.
Я использую Delphi XE7 (который, я думаю, использует Indy 10). Свойству Passive для моего IdFTP установлено значение false.
Снимите тайм-аут или увеличьте его. В любом случае загрузка большого файла или неизвестного размера файла не должна иметь тайм-аута вообще или, возможно, должна быть установлена на большое время. Представьте, что кто-то использует очень медленное подключение к Интернету. Вы используете активный или пассивный режим? И какая версия Indy? –
Я не уверен, какой тайм-аут, не читая мои знания FTP, я отказался от использования FTP для того, чтобы быть нестабильным (для использования программы) и перешел на HTTP давным-давно. Но где-то у вас есть тайм-аут. Если нет, то это должно быть проблемой на стороне сервера. –
Даже если кто-то может ответить, не видя вашей полной настройки, ответ может существенно отличаться в зависимости от версии Indy и режима FTP. Вы должны включить их. Но я предполагаю, что если у вас нет тайм-аута, возможно, сервер. Вы пробовали на разных серверах? –