在我的项目中,我有一个file uploadfunction。 文件通过FTP上传。 我需要configuration一个侦听器来检查新文件,并只在file upload完成时调用脚本。 因为如果我在检测到新文件后立即运行这个脚本,它可以开始处理没有完全上传的文件,这会导致错误。 任何人都可以告诉如果这是可能的LINUX,我该怎么做?
我会尝试使用inotify ,事件代码IN_CLOSE_WRITE。
如上所述,Apache“Mina”ftp服务器(java)可能能够做你想做的事情,包括检测失败的上传
引用:
从Ftplet.afterCommand,你应该能够看到答复。 对于Ftpserver可以检测到的那些失败的传输(这会导致SocketException或IOException),应该像426或551那样。
这里汇总概述,包括响应代码。
afterCommand方法签名:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
你会在你的覆盖方法中检查reply.getCode()
。 您应该Ftplet
DefaultFtplet
而不是从头开始实现Ftplet
接口。
请注意, DefaultFtplet::afterCommand
显示如何检测正在响应的客户端命令。 您可以检查STOR
或STOU
和回复代码426
或551
来检测上传失败。
但是,如果客户端应用程序决定将传输视为文件比它短,则这可能无法检测到客户端有意终止的上载。 在无意中断开连接的情况下,我认为回复代码检查将起作用。 一个测试可能是杀死客户端应用程序,或者打开客户端的网络接口。
为了处理成功的上传(你原来的问题),你可以找到成功的答复代码,即226
。
看看inotify
它不会自动监视子目录,所以如果你需要监视很多ftp账户(或者FTP客户端想要创建一个子目录并在那里上传),你需要自己处理。
我正在寻找同样的东西,偶然发现了具有上传脚本功能的pureftpd。 听起来像是需要什么。 在这里找到详细信息: http : //www.linuxbyexamples.net/2012/10/config-ftp-server-trigger-upload-file-to-call-external-script.html
我使用了Proftpd的HiddenStores功能。 它通过以.in.filename.ext为前缀保留传输中的文件,直到它们完成上传。 您的进程可以安全地列出已完成文件的目录。
http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html