在我的项目中,我有一个文件上传功能。文件通过FTP上传。我需要配置一个侦听器,它将检查新文件,并仅在文件上传完成时调用脚本。因为如果我在检测到新文件后立即运行此脚本,它可能会开始处理未完全上载的文件,这将导致错误。有没有人知道这在LINUX上是不是可能的,我该怎么做?
发布于 2010-06-18 22:43:45
我会尝试使用inotify,事件代码IN_CLOSE_WRITE。
发布于 2011-05-28 14:44:57
Apache "Mina“ftp服务器(java)也许能够做你想要的事情,包括检测失败的上传,正如前面提到的here。
引用:
来自Ftplet.afterCommand的
,您应该能够看到回复。对于FtpServer可以检测到的那些失败的传输(这会导致SocketException或IOException),这个值应该类似于426或551。
Ftplet概述here,包括响应代码。
afterCommand方法签名:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)您可以在覆盖的方法中检查reply.getCode()。您应该子类化DefaultFtplet,而不是从头开始实现Ftplet接口。
请注意,DefaultFtplet::afterCommand显示了如何检测正在响应的客户端命令。您可以检查STOR或STOU,并使用回复代码426或551来检测失败的上传。
然而,如果客户端应用程序决定将传输视为文件只是比其实际短,则这可能不会检测到客户端故意终止的上传。在意外断开连接的情况下,我认为回复代码检查会起作用。一个测试可以是杀死客户端应用程序,或者关闭客户端机器的网络接口。
要处理成功的上传(你最初的问题),你可以寻找成功的回复代码,即226。
发布于 2010-06-18 22:44:04
看一看inotify
它不会自动监视子目录,所以如果你需要监控很多ftp账户(或者FTP客户端想要创建一个子目录并上传到那里),你需要自己处理。
https://stackoverflow.com/questions/3070555
复制相似问题