LINUX:如何检测ftp文件上传完成

and*_*111 18 linux ftp upload

在我的项目中,我有一个文件上传功能.文件通过FTP上传.我需要配置一个侦听器,它将检查新文件并仅在文件上载完成时调用脚本.因为如果我在检测到新文件后立即运行此脚本,它可以开始处理未完全上载的文件,这将导致错误.任何人都可以告诉LINUX这是否可行,我该怎么做?

Jor*_*ril 12

我尝试使用inotify,事件代码IN_CLOSE_WRITE.

  • +1,但值得一提的是一些ftp服务器创建一个隐藏的临时文件来接收数据,直到xfer完成.即`.foo-ftpupload-2837948723`在与目标文件相同的上传路径中,因此您需要确保您的事件循环可以处理该事件,并且在文件实际重命名之前不会触发任务. (7认同)
  • 谢谢你的建议.我尝试了inotify,但是我发现在文件没有完全上传的情况下会触发IN_CLOSE_WRITE,但连接丢失(例如,如果我停止上传或关闭FTP客户端).所以我相信没有办法检测文件COMPLETELY上传而不是使用HTTP.它是否正确? (2认同)

Kel*_*vin 6

阿帕奇"米娜" FTP服务器(JAVA)也许能够做你想做的,包括检测上传失败,提到这里

引用:

从Ftplet.afterCommand,你应该能够看到答复.对于FtpServer可以检测到的那些失败的传输(导致SocketException或IOException),这应该是426或551.

这里有 Ftplet概述,包括响应代码.

afterCommand方法签名:

FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
Run Code Online (Sandbox Code Playgroud)

你要检查reply.getCode()你的覆盖方法.您应该是子类,DefaultFtplet而不是Ftplet从头开始实现接口.

请注意,它DefaultFtplet::afterCommand显示了如何检测正在响应的客户端命令.您可以检查STORSTOU回复代码426551检测上传失败.

但是,如果客户端应用程序决定将传输视为文件只是比它短,则可能无法检测到客户端故意终止的上载.在无意中断连接的情况下,我认为回复代码检查将起作用.测试可能是杀死客户端应用程序,或者关闭客户端计算机的网络接口.

要处理成功上传(您的原始问题),您可以查找成功回复代码,即226.