Zkusil bych použít inotify, kód události IN_CLOSE_WRITE.
Apache "Mina" ftp server (java) může být schopen dělat, co chcete, včetně detekce neúspěšného nahrávání, jak je uvedeno zde
Citace:
Z Ftplet.afterCommand byste měli být schopni se podívat na odpověď. Pro ty neúspěšné přenosy, které FtpServer dokáže detekovat (což způsobuje SocketException nebo IOException), by to mělo být něco jako 426 nebo 551.
Přehled Ftplet zde, včetně kódů odpovědí.
Podpis metody afterCommand:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Zaškrtli byste reply.getCode()
ve vaší přepsané metodě. Měli byste podtřídu DefaultFtplet
místo implementace Ftplet
rozhraní od začátku.
Všimněte si, že DefaultFtplet::afterCommand
ukazuje, jak zjistit, na jaký příkaz klienta se odpovídá. Můžete zkontrolovat STOR
nebo STOU
a kód odpovědi 426
nebo 551
k detekci neúspěšných nahrávání.
To však nemusí detekovat nahrávání záměrně ukončené klientem, pokud se klientská aplikace rozhodne nakládat s přenosem, jako by byl soubor jen kratší, než je. V případě neúmyslného přerušení spojení si myslím, že bude fungovat kontrola kódu odpovědi. Testem může být zabití klientské aplikace nebo vypnutí síťového rozhraní klientského počítače.
Chcete-li zpracovat úspěšná nahrávání (vaše původní otázka), můžete místo toho hledat kód odpovědi pro úspěšnou odpověď, tj. 226
.