File upload 如何检测通过FTP上载的文件
我的应用程序正在监视一组用户可以上传文件的文件夹。当文件上传完成时,我必须进行处理,但我不知道如何检测文件尚未完成上传File upload 如何检测通过FTP上载的文件,file-upload,ftp,upload,File Upload,Ftp,Upload,我的应用程序正在监视一组用户可以上传文件的文件夹。当文件上传完成时,我必须进行处理,但我不知道如何检测文件尚未完成上传 有没有办法检测FTP服务器是否还没有发布文件?这个问题没有通用的解决方案 某些FTP服务器锁定正在上载的文件,阻止您在文件仍在上载时访问该文件。例如,iisftp服务器就是这样做的。大多数其他FTP服务器不这样做。请参阅我的答案 该问题有一些常见的解决方法(最初发布在中,但也与FTP相关): 上传完成后,您可以让客户端上传“完成”文件。让您的自动化系统等待“完成”文件出现
有没有办法检测FTP服务器是否还没有发布文件?这个问题没有通用的解决方案 某些FTP服务器锁定正在上载的文件,阻止您在文件仍在上载时访问该文件。例如,iisftp服务器就是这样做的。大多数其他FTP服务器不这样做。请参阅我的答案
该问题有一些常见的解决方法(最初发布在中,但也与FTP相关):
- 上传完成后,您可以让客户端上传“完成”文件。让您的自动化系统等待“完成”文件出现
- 您可以有一个专用的“上载”文件夹,并让客户端(原子地)将上载的文件移动到“完成”文件夹。让您的自动化系统只查看“完成”文件夹
- 对正在上载的文件有一个文件命名约定(“.filepart”),并让客户端(原子地)在上载后将文件重命名为最终名称。使您的自动化系统忽略“.filepart”文件 有关实现此方法的示例,请参见(我的)文章 此外,一些FTP服务器内置了此功能。例如,ProFTPD及其子系统
- 您还可以利用以下事实:某些文件格式具有清晰的文件结尾标记(如XML或ZIP)。所以你知道,当你下载一个不完整的文件时
某些FTP服务器允许您在上传完成时配置要调用的钩子。你可以利用这一点。例如,ProFTPD有一个(请参阅
ExecOnCommand
指令)。这个问题没有通用的解决方案
某些FTP服务器锁定正在上载的文件,阻止您在文件仍在上载时访问该文件。例如,iisftp服务器就是这样做的。大多数其他FTP服务器不这样做。请参阅我的答案
该问题有一些常见的解决方法(最初发布在中,但也与FTP相关):
- 上传完成后,您可以让客户端上传“完成”文件。让您的自动化系统等待“完成”文件出现
- 您可以有一个专用的“上载”文件夹,并让客户端(原子地)将上载的文件移动到“完成”文件夹。让您的自动化系统只查看“完成”文件夹
- 对正在上载的文件有一个文件命名约定(“.filepart”),并让客户端(原子地)在上载后将文件重命名为最终名称。使您的自动化系统忽略“.filepart”文件 有关实现此方法的示例,请参见(我的)文章 此外,一些FTP服务器内置了此功能。例如,ProFTPD及其子系统
- 您还可以利用以下事实:某些文件格式具有清晰的文件结尾标记(如XML或ZIP)。所以你知道,当你下载一个不完整的文件时
某些FTP服务器允许您在上传完成时配置要调用的钩子。你可以利用这一点。例如,ProFTPD有一个(请参见
ExecOnCommand
指令)。我使用它来实现以下工作:
整个ftp抓取都是过时的老技术。我希望客户下次会使用现代http API:-)这是FTP传输的典型问题。我发现的唯一最可靠的方法是发送一个文件,然后发送第二个简短的“标记”文件,告诉接收者第一个文件的传输已经完成。您可以使用文件命名约定,只需检查第二个文件是否存在 您可能会想入非非,将第二个文件的内容设置为第一个文件的校验和。然后您可以验证第一个文件。(第二个文件没有问题,因为您只需等待文件大小=校验和大小)
当然,这只有在你能让发送者发送第二个文件的情况下才有效。这是FTP传输的典型问题。我发现的唯一最可靠的方法是发送一个文件,然后发送第二个简短的“标记”文件,告诉接收者第一个文件的传输已经完成。您可以使用文件命名约定,只需检查第二个文件是否存在 您可能会想入非非,将第二个文件的内容设置为第一个文件的校验和。然后您可以验证第一个文件。(第二个文件没有问题,因为您只需等待文件大小=校验和大小) 当然,这只有在你能让发送者发送的情况下才有效