我有一个SFTP服务器(debian ssh服务器),远程用户只需将一个大文件上传到特定目录。
我的挑战是我需要检测:
1)存在新文件。
2)上传过程/传输已完成。
最好的方法是什么?也许已经有一些工具可用于此?
逻辑上我认为我可以在第一阶段检测到目录中存在新文件。然后在第二阶段循环/等待,直到用户SFTP断开连接!?之后我可以解雇下一个过程...
Thx&干杯, 彼得
答案 0 :(得分:2)
对于问题1),您可以使用inotify
API来查看目录以进行更改。您没有说出您使用的编程语言。在Perl中,您将在Python Linux::Inotify
中使用pynotify
。
对于问题2),一种方法是等到ssh会话断开连接,另一种方法是使用inotify
来监视文件关闭通知。
答案 1 :(得分:0)
我遇到了类似的情况。虽然我使用了JSCH,但这种方法可能有所帮助。
您可以使用一些临时扩展名上传文件。例如 bigFile.txt.temp 。文件上传后,rename将其转换为所需的文件名,即 bigFile.txt ,并删除临时文件。 JSCH ChannelSftp。在JSCH中,重命名只能保留一个文件。所以你不需要明确删除临时文件。
在上传任何较新版本的文件之前,请检查是否存在临时文件 - bigFile.txt.temp。如果存在,则表示该文件当前正在上传。设置回复代码或等待会话断开连接。
答案 2 :(得分:0)