FTP-сервер Apache "Mina" (java) может делать то, что вы хотите, включая обнаружение неудачной загрузки, как упоминалось здесь
Цитата:
Из Ftplet.afterCommand вы сможете посмотреть ответ.Для тех неудачных передач, которые может обнаружить FtpServer (который вызывает исключение SocketException или IOException), это должно быть что-то вроде 426 или 551.
Обзор Ftplet здесь , включая коды ответов.
Подпись метода afterCommand:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Вы бы отметили reply.getCode()
в своем переопределенном методе.Вы должны создать подкласс DefaultFtplet
, а не реализовывать интерфейс Ftplet
с нуля.
Обратите внимание, что DefaultFtplet::afterCommand
показывает, как определить, на какую клиентскую команду отвечает.Вы можете проверить STOR
или STOU
и код ответа 426
или 551
для обнаружения неудачных загрузок.
Однако, это может не обнаружить загрузку, намеренно прерванную клиентом, если клиентПриложение решает обработать передачу так, как если бы файл был просто короче, чем он есть.В случае непреднамеренно разорванного соединения, я думаю, что проверка кода ответа будет работать.Тест может состоять в том, чтобы убить клиентское приложение или отключить сетевой интерфейс клиентского компьютера.
Для обработки успешных загрузок (ваш исходный вопрос) вы можете вместо этого искать код ответа успеха, то есть 226
.