我有一个通过 FTP 处理传入文件的服务。
在我安装 Proftpd 的 Debian 服务器上,我使用 iNotify 事件来确定文件传输何时完成并且我可以开始使用它。
一旦不再写入文件,就会触发该事件。
在我发现新的尼康 D4 相机和 WT-5 无线发射器使用 APPE FTP 命令发送文件之前,这种方法非常有效。
从我读到的内容看来,APPE FTP 命令以数据块的形式发送文件,这些文件在第一个块创建文件后附加到服务器上的现有文件中。
然而,这会导致多个 iNotify 事件被触发,因为文件被多次而不是一次写入,直到连接关闭。
由于文件是在文件完成之前处理的,因此一旦处理就会导致错误。而且我总是在处理后删除文件。
由于我的这项服务在处理传入文件时必须保持快速,我真的很喜欢这个带有 iNotify 的解决方案,并且真的不想计时文件大小是否保持不变 n 秒或确定文件传输是否完成。
我的问题是:有什么方法可以确定文件传输是否实际完成,而无需检查文件大小或比较上次修改日期?
我试图在 proftpd 中找到一种方法,但无济于事。
xferlog 指出同一个文件已完成多次:
Fri May 11 14:15:41 2012 2 host-95-199-17-243.mobileonline.telia.com 131072 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:43 2012 2 host-95-199-17-243.mobileonline.telia.com 262144 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:47 2012 3 host-95-199-17-243.mobileonline.telia.com 385624 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
最后的 c 表示传输完成。
因此,如果我必须检查每个传入文件的文件是否实际完成,这意味着实际完成的文件会出现不必要的延迟。
似乎这不应该是一个不寻常的问题,但找不到任何关于它的东西。
有任何想法吗?