Проблема с загрузкой на FTP - передано 0 байт

В одном из наших проектов мы используем API-интерфейсы FTP-клиента Apache. Мне нужно загрузить файл xml на FTP-сервер, где процесс будет продолжать опрашивать этот каталог сервера. Поэтому, используя API загрузки, я загружаю файл xml с расширением .TRANSFER, и после успешной загрузки полного файла файл будет переименован в файл .xml.

Странная проблема, с которой я столкнулся, заключалась в том, что иногда размер файла равен 0 байт. но тот же файл иногда полностью загружается. Когда я просмотрел файл журнала, переданные байты составляют всего 0 КБ. Поэтому я не уверен, в чем может быть проблема.

Я использую Linux-сервер и API-интерфейсы FTP-клиента Apache Commons.

Любые советы и рекомендации по отладке будут полезны.

С уважением, Шринивас


person Srinivas    schedule 30.06.2009    source источник


Ответы (5)


Я тоже столкнулся с этим некоторое время назад.

Я заметил, что если файл был больше определенного размера (для меня это было 174 байта или около того), он действительно передавался правильно. Меньшие файлы в конечном итоге были созданы как файлы с нулевым байтом.

Я считаю, что это ошибка в ftp-коде Apache commons. Я исправил это, получив исходный код, и сделал быстрое исправление, и полученный jar, который я создал, работал на нас.

Если я правильно помню исправление, я отключил алгоритм Нэгла с помощью socket.setTcpNoDelay(false) в сокете, который использовался для передачи в обычном ftp-коде.

person Onkar Joshi    schedule 27.06.2011

Если это случается иногда, это пахнет конфигурацией брандмауэра на одном из концов. Трудно диагностировать, но начните (если можете) пробовать переключаться между активным/пассивным.

Посмотрите здесь для лучшей ссылки: http://slacksite.com/other/ftp.html

person nikudesu    schedule 30.06.2009

Еще одна возможная проблема с конфигурацией брандмауэра: если вы используете ftp из коробки linux/unix с настроенными iptables, убедитесь, что у вас есть таблицы, настроенные для разрешения «отслеживания ftp-соединений».

В ходе ftp-транзакции ваш клиентский компьютер устанавливает ftp-соединение, а затем выдает команду ftp STOR для загрузки файла. Начальная часть транзакции выполняется на стандартных ftp-сокетах (20,21), затем переключается на случайный порт с большим номером, выбранный ftp-сервером, если он находится в АКТИВНОМ режиме, или клиентом, если он находится в ПАССИВНОМ (PASV) режиме. Если вы находитесь в АКТИВНОМ режиме, iptables может не разрешить серверу общаться с вашей клиентской машиной на этом случайно выбранном порту, вы получите нулевой байтовый файл с правильным именем и без других данных.

Вы можете исправить это, переключив транзакцию в ПАССИВНЫЙ режим со стороны клиента или настроив iptables на клиентской машине для «отслеживания соединения»:

http://www.linuxchix.org/content/courses/security/connection_tracking

person jomofrodo    schedule 07.12.2011

Проверьте емкость вашего диска. Я столкнулся с такой ситуацией, когда работал над проектом Raspberry Pi. Мне приходилось работать с загрузками больших файлов, и это приводило к очень быстрому заполнению SD-карты RPi. После достижения определенного размера FTP загружает файлы размером 0 байт. Не только для небольшого хранилища, это может произойти где угодно. Например, ваш сервер может создавать гигабайты файлов журнала ошибок. Через некоторое время пространство вашего сервера будет заполнено этими файлами журналов. То же самое происходит и при загрузке по FTP. Проверьте это тоже. Ваше здоровье!

person Tharanga    schedule 03.05.2017

Попробуйте запустить WireShark и посмотреть, что происходит по сети? Это может дать вам ключ к пониманию того, в чем заключается проблема.

http://www.wireshark.org/

person the.jxc    schedule 30.06.2009