Commons FTPClient зависает после загрузки большого файла

2

Я использую Apache Commons FTPClient 3.1 для простой загрузки файлов. Файл storefile() отлично работает для файлов меньших размеров (до 100 МБ), но когда я пытаюсь загрузить что-то большее, чем 100 МБ, он завершит загрузку, но просто повесит.

Я попытался войти в пассивный режим, как это предполагали другие, но, похоже, проблема не устранена. Я пробовал несколько FTP-серверов с одинаковыми результатами, поэтому я предполагаю, что это не хост.

Вот суть того, что я делаю:

ftpClient.connect(...);
ftpClient.login(...);
ftpClient.enterLocalPassiveMode();
boolean success = ftpClient.storeFile(...);
if(success)
...

Программа зависает в строке 4 для больших файлов, но успешно загружает файл.

Теги:
upload
apache-commons
ftp-client

1 ответ

6
Лучший ответ

https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html

Время ожидания. Эта ссылка может помочь.

Функция поддержания канала управления: Во время передачи файлов соединение для передачи данных занято, но управляющее соединение не работает. FTP-серверы знают, что управляющее соединение используется, поэтому не будет закрывать его из-за отсутствия активности, но сетевым маршрутизаторам гораздо труднее узнать, что соединения управления и данных связаны друг с другом. Некоторые маршрутизаторы могут обрабатывать соединение управления как незанятое и отключать его, если передача по соединению данных занимает больше времени, чем допустимое время простоя для маршрутизатора. Одним из решений этого является отправка безопасной команды (то есть NOOP) по управляющему соединению с reset таймером простоя маршрутизатора. Это активируется следующим образом:

 ftpClient.setControlKeepAliveTimeout(300); // set timeout to 5 minutes

Это приведет к тому, что методы загрузки/загрузки файлов будут отправлять NOOP примерно каждые 5 минут.

  • 0
    Благодарю. Это была проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню