首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何知道文件在使用FTP的服务器上是否完整?

如何知道文件在使用FTP的服务器上是否完整?
EN

Stack Overflow用户
提问于 2013-01-22 13:59:15
回答 3查看 34.7K关注 0票数 24

我有一个用Java编写的文件扫描器应用程序,它使用FTP不断扫描服务器上的目录。获取目录下的文件列表,并逐个下载。另一方面,在服务器上,有一个写入这些文件的进程。如果我幸运的话,我不会尝试下载一个不完整的文件,但我如何才能确保服务器上的写入过程已经完成,文件句柄已经关闭,文件已经准备好下载?

我无法控制服务器上的写入过程。此外,我在目录上没有写权限,无法尝试获取写句柄来检查是否已经有打开的写句柄,所以这个选项不在表中。

有没有解决这个问题的FTP函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-22 14:32:26

这是一个非常古老且众所周知的问题。

无法绝对确定FTP守护程序正在写入的文件是否完整。甚至有可能文件传输失败,然后重新启动并完成。您必须轮询文件的大小并设置时间限制,例如5分钟。如果文件大小在这段时间内没有变化,则假定文件已完成。

如果可能,处理文件的程序应该能够处理部分文件。

更好的替代方案是rsync,它更健壮,更具确定性。它甚至可以(通过命令行选项)配置为最初将数据写入临时位置,并在成功完成后将其移动到其最终目标路径。如果文件存在于您期望的位置,则根据定义它是完整的。

票数 27
EN

Stack Overflow用户

发布于 2013-01-22 14:37:19

一种可能的解决方案是首先上传具有不同文件名的文件(例如,添加".partial"),然后将其重命名为其最终名称。

如果服务器找到了最终名称,则上传已完成。

如果您不能控制上传过程,那么根据定义,您所要求的内容是不可能的:文件上传可能会因为网络问题而停止,或者因为发送过程因某种原因而停止。

接收端将观察到的只是传入流的关闭;无法保证数据不会是部分传输。

其他变通方法可能是检查数据结束标记,或者使用对发送服务器的请求来检查(在他们看来)传输是否已经完成。

票数 12
EN

Stack Overflow用户

发布于 2013-01-22 14:03:00

你可以从Apache通用接口get more information中使用Ftp库。

代码语言:javascript
复制
 boolean flag = retrieveFile(String remote, OutputStream local);

此标志检查当前文件的输出流是否可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14452456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档