在我的项目中,我有一个文件上传功能 . 文件通过FTP上传 . 我需要配置一个侦听器,它将检查新文件并仅在文件上载完成时调用脚本 . 因为如果我在检测到新文件后立即运行此脚本,它可以开始处理未完全上载的文件,这将导致错误 . 任何人都可以告诉LINUX这是否可行,我该怎么做?
我尝试使用inotify,事件代码IN_CLOSE_WRITE .
Apache "Mina" ftp服务器(java)可能能够执行您想要的操作,包括检测上载失败,如上所述here
引用:
从Ftplet.afterCommand,你应该能够看到答复 . 对于FtpServer可以检测到的那些失败的传输(导致SocketException或IOException),这应该是426或551 .
Ftplet概述here,包括响应代码 .
afterCommand方法签名:
FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply)
你在overriden方法中检查 reply.getCode() . 您应该继承 DefaultFtplet ,而不是从头开始实现 Ftplet 接口 .
reply.getCode()
DefaultFtplet
Ftplet
请注意, DefaultFtplet::afterCommand 显示了如何检测正在响应的客户端命令 . 您可以检查 STOR 或 STOU 和回复代码 426 或 551 以检测上传失败 .
DefaultFtplet::afterCommand
STOR
STOU
426
551
但是,如果客户端应用程序决定将传输视为文件只是比它短,则可能无法检测到客户端故意终止的上载 . 在无意中断连接的情况下,我认为回复代码检查将起作用 . 测试可能是杀死客户端应用程序,或者关闭客户端计算机的网络接口 .
要处理成功上传(您的原始问题),您可以查找成功回复代码,即 226 .
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
5 回答
我尝试使用inotify,事件代码IN_CLOSE_WRITE .
Apache "Mina" ftp服务器(java)可能能够执行您想要的操作,包括检测上载失败,如上所述here
引用:
Ftplet概述here,包括响应代码 .
afterCommand方法签名:
你在overriden方法中检查
reply.getCode()
. 您应该继承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