首页 文章

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

提问于
浏览
17

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

5 回答

  • 0

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

  • 1

    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 接口 .

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

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

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

  • 3

    看看inotify

    它不会自动监视子目录,因此如果您需要监视许多ftp帐户(或FTP客户端想要创建子目录并在那里上传),您需要自己处理 .

  • 12

    我一直在寻找同样的东西,偶然发现了pureftpd,它具有上传脚本功能 . 听起来确实需要什么 . 在这里找到详细信息:http://www.linuxbyexamples.net/2012/10/config-ftp-server-trigger-upload-file-to-call-external-script.html

  • 6

    我使用了Proftpd的HiddenStores功能 . 它通过在.in.filename.ext前添加前缀来保持传输中的文件,直到它们完成上载 . 然后,您的进程可以安全地列出已完成文件的目录 .

    http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html

相关问题