1

我们正在从 FTP 服务器下载文件。文件内容有时会发生变化。文件名始终相同。

这种情况可能吗?

  1. 文件内容为“aaaaaaaaaaaaa”
  2. 我们开始下载
  3. 文件被覆盖,看起来像“bbbbbbbbbbbbb”
  4. 我们得到的文件内容是“aaaaabbbbbb”

用于下载的库是 apache commons-net。

使用的代码是:

FTPClient ftpClient = new FTPClient();
//client connecting code...
//...
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ftpClient.retrieveFile(path, outputStream);
outputStream.writeTo(new FileOutputStream(new File("myFile.txt")));
4

3 回答 3

2

这实际上可能发生。因此,我建议您在下载之前获取文件的校验和。(使用 FTP 站点命令在服务器上执行脚本给您校验和)然后在下载后与下载文件的校验和进行比较。

于 2012-07-30T14:47:11.383 回答
0

是的,这种情况是可能的,具体取决于 FTP 服务器的实现方式,以及文件如何写入它所服务的区域。

您无法在 FTP 客户端/协议级别处理此问题。

但是您可以通过让服务器端应用程序生成并写入更新文件的校验和或散列并将其写入 FTP 区域来在应用程序级别解决它。然后客户端可以读取数据文件和校验和文件,并检查数据文件的校验和是否正确。如果它们不匹配,补救措施是再次获取这两个文件。

于 2012-07-30T14:47:56.597 回答
0

如果您使用的是 unix 服务器,则文件不应在下载过程中更改。连接中断后,您无能为力。但要不更改正在下载的文件,您应该更改上传或创建文件到 FTP 服务器的过程。首先上传文件成临时文件名。我在bash中使用$RANDOM,没关系,.tmp后缀就足够了,只要在同一个目录中不存在samename.tmp作为合法文件。然后做 mv tempname.tmp 同名。Move 是在 unix 服务器上的原子操作。这意味着开始的用户将继续下载原始文件。移动后将打开文件的用户将开始下载新文件。当 FTP 服务器打开的所有句柄都关闭时,内核将删除旧文件。

于 2012-07-30T15:08:27.003 回答