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

问题描述 投票:18回答:6

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

linux upload ftp
6个回答
12
投票

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


6
投票

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显示了如何检测正在响应的客户端命令。您可以检查STORSTOU并回复代码426551以检测失败的上传。

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

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


3
投票

看看inotify


1
投票

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


0
投票

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


0
投票

[旧的,但仍然值得添加好主意。

© www.soinside.com 2019 - 2024. All rights reserved.