Proverei a utilizzare inotify, codice evento IN_CLOSE_WRITE.
Il server ftp Apache "Mina" (java) potrebbe essere in grado di fare ciò che desideri, incluso il rilevamento di un caricamento non riuscito, come menzionato qui
Citazione:
Da Ftplet.afterCommand, dovresti essere in grado di guardare la risposta. Per quei trasferimenti falliti che FtpServer può rilevare (che causa un'eccezione Socket o IOException) questo dovrebbe essere qualcosa come 426 o 551.
Panoramica di Ftplet qui, inclusi i codici di risposta.
La firma del metodo afterCommand:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Dovresti selezionare reply.getCode()
nel tuo metodo sovrascritto. Dovresti creare una sottoclasse DefaultFtplet
piuttosto che implementare Ftplet
interfaccia da zero.
Nota che DefaultFtplet::afterCommand
mostra come rilevare a quale comando client si risponde. Puoi controllare STOR
o STOU
e codice di risposta 426
o 551
per rilevare i caricamenti non riusciti.
Tuttavia, questo potrebbe non rilevare un caricamento interrotto intenzionalmente dal client, se l'app client decide di trattare il trasferimento come se il file fosse solo più corto di quello che è. Nel caso di una connessione interrotta involontariamente, penso che il controllo del codice di risposta funzionerà. Un test potrebbe consistere nel terminare l'app client o nel disattivare l'interfaccia di rete del computer client.
Per gestire i caricamenti riusciti (la tua domanda originale), puoi invece cercare il codice di risposta di successo, ad esempio 226
.