Ich würde versuchen, Inotify zu verwenden, Ereigniscode IN_CLOSE_WRITE.
Der Apache "Mina" FTP-Server (Java) kann möglicherweise das tun, was Sie möchten, einschließlich der Erkennung eines fehlgeschlagenen Uploads, wie hier erwähnt
Zitat:
Von Ftplet.afterCommand aus sollten Sie sich die Antwort ansehen können. Für die fehlgeschlagenen Übertragungen, die FtpServer erkennen kann (was eine SocketException oder IOException verursacht), sollte dies so etwas wie 426 oder 551 sein.
Ftplet-Übersicht hier, einschließlich Antwortcodes.
Die afterCommand-Methodensignatur:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Sie würden reply.getCode()
überprüfen in Ihrer überschriebenen Methode. Sie sollten DefaultFtplet
ableiten anstatt Ftplet
zu implementieren Benutzeroberfläche von Grund auf neu.
Beachten Sie, dass DefaultFtplet::afterCommand
zeigt, wie man erkennt, auf welchen Client-Befehl geantwortet wird. Sie können nach STOR
suchen oder STOU
und Antwortcode 426
oder 551
um fehlgeschlagene Uploads zu erkennen.
Dies kann jedoch einen vom Client absichtlich abgebrochenen Upload nicht erkennen, wenn die Client-App beschließt, die Übertragung so zu behandeln, als wäre die Datei nur kürzer als sie ist. Im Falle einer unbeabsichtigten Verbindungsunterbrechung funktioniert meiner Meinung nach die Reply-Code-Prüfung. Ein Test könnte darin bestehen, die Client-App zu beenden oder die Netzwerkschnittstelle des Client-Computers herunterzufahren.
Um erfolgreiche Uploads (Ihre ursprüngliche Frage) zu handhaben, können Sie stattdessen nach dem Antwortcode für den Erfolg suchen, dh 226
.