我的应用程序正在监视用户可以上传文件的一组文件夹。文件上传完成后,我必须应用处理,但我不知道如何检测文件还没有完成上传。
有没有办法检测FTP服务器是否还没有发布文件?
这个问题没有通用的解决方案。
某些FTP服务器锁定正在上载的文件,阻止您访问该文件,同时仍在上载文件。例如,IIS FTP服务器就是这样做的。大多数其他FTP服务器没有。请参阅我在Prevent file from being accessed as it's being uploaded的回答。
这个问题有一些常见的解决方法(最初发布在SFTP file lock mechanism,但也与FTP相关):
某些FTP服务器允许您在上载完成时配置要调用的挂钩。你可以利用它。例如,ProFTPD有一个mod_exec module(参见ExecOnCommand
指令)。
我使用ftputil来实现这个解决方法:
这整个ftp-fetching是旧的和过时的技术。我希望客户下次会使用现代的http API :-)
如果您正在读取特定扩展名的文件,请使用WINSCP进行文件传输。它将创建一个扩展名为.filepart的临时文件,一旦完全传输文件,它将转向实际的文件扩展名。
我希望,它会帮助某人。
这是FTP传输的典型问题。我发现的唯一可靠的方法是发送文件,然后发送第二个简短的“标记”文件,告诉收件人第一个传输完成。您可以使用文件命名约定,只检查第二个文件是否存在。
您可能会喜欢并将第二个文件的内容作为第一个文件的校验和。然后你可以验证第一个文件。 (你没有第二个文件的问题,因为你只是等到文件大小=校验和大小)。
当然,这只有在您可以让发件人发送第二个文件时才有效。