J'essaierais d'utiliser inotify, code d'événement IN_CLOSE_WRITE.
Le serveur ftp Apache "Mina" (java) pourra peut-être faire ce que vous voulez, y compris détecter un échec de téléchargement, comme mentionné ici
Citation :
À partir de Ftplet.afterCommand, vous devriez pouvoir consulter la réponse. Pour les transferts échoués que FtpServer peut détecter (ce qui provoque une exception de socket ou une exception d'IO), cela devrait être quelque chose comme 426 ou 551.
Vue d'ensemble du ftplet ici, y compris les codes de réponse.
La signature de la méthode afterCommand :
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Vous cochez reply.getCode()
dans votre méthode surchargée. Vous devriez sous-classer DefaultFtplet
plutôt que d'implémenter Ftplet
interface à partir de zéro.
Notez que DefaultFtplet::afterCommand
montre comment détecter à quelle commande client on répond. Vous pouvez vérifier STOR
ou STOU
et le code de réponse 426
ou 551
pour détecter les échecs de téléchargement.
Cependant, cela peut ne pas détecter un téléchargement interrompu intentionnellement par le client, si l'application cliente décide de traiter le transfert comme si le fichier était juste plus court qu'il ne l'est. Dans le cas d'une connexion accidentellement interrompue, je pense que la vérification du code de réponse fonctionnera. Un test peut consister à tuer l'application cliente ou à désactiver l'interface réseau de la machine cliente.
Pour gérer les téléchargements réussis (votre question d'origine), vous pouvez rechercher le code de réponse de réussite à la place, c'est-à-dire 226
.