Intentaría usar inotify, código de evento IN_CLOSE_WRITE.
El servidor ftp Apache "Mina" (java) podría hacer lo que usted quiera, incluida la detección de una carga fallida, como se menciona aquí
Cita:
Desde Ftplet.afterCommand, debería poder ver la respuesta. Para aquellas transferencias fallidas que FtpServer puede detectar (que causan una excepción de socket o una excepción de IO), esto debería ser algo así como 426 o 551.
Descripción general de Ftplet aquí, incluidos los códigos de respuesta.
La firma del método afterCommand:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Comprobarías reply.getCode()
en su método anulado. Deberías subclasificar DefaultFtplet
en lugar de implementar Ftplet
interfaz desde cero.
Tenga en cuenta que DefaultFtplet::afterCommand
muestra cómo detectar a qué comando del cliente se está respondiendo. Puedes buscar STOR
o STOU
y código de respuesta 426
o 551
para detectar cargas fallidas.
Sin embargo, es posible que esto no detecte una carga que el cliente finalizó intencionalmente, si la aplicación del cliente decide tratar la transferencia como si el archivo fuera más corto de lo que es. En el caso de una conexión rota involuntariamente, creo que la verificación del código de respuesta funcionará. Una prueba podría ser eliminar la aplicación cliente o desactivar la interfaz de red de la máquina cliente.
Para manejar cargas exitosas (su pregunta original), puede buscar el código de respuesta exitosa, es decir, 226
.