我的应用程序正在监视用户可以上传文件的一组文件夹。文件上传完成后,我必须应用处理,但我不知道如何检测文件还没有完成上传。
是否可以检测FTP服务器是否尚未发布文件?
答案 0 :(得分:16)
这个问题没有通用解决方案。
某些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
指令)。
答案 1 :(得分:5)
我使用ftputil来实现此解决方法:
这整个ftp-fetching是旧的和过时的技术。我希望客户下次使用现代的http API: - )
答案 2 :(得分:2)
如果要读取特定扩展名的文件,请使用 WINSCP 进行文件传输。它将创建一个扩展名为 .filepart 的临时文件,一旦完全传输该文件,它将变为实际的文件扩展名。
我希望它将对某人有所帮助。
答案 3 :(得分:0)
这是FTP传输的典型问题。我发现的唯一主要可靠方法是发送文件,然后发送第二个短标记"文件只是告诉收件人第一个转移完成。您可以使用文件命名约定,只检查是否存在第二个文件。
您可能会喜欢并将第二个文件的内容作为第一个文件的校验和。然后你可以验证第一个文件。 (你不会遇到第二个文件的问题,因为你只等到文件大小=校验和大小)。
当然,这只有在您可以让发件人发送第二个文件时才有效。