如何检测FTP文件传输完成?

时间:2011-04-11 17:59:04

标签: perl ftp transfer complete

我正在编写一个脚本,用于轮询FTP站点的文件,并在可用时在本地下载它们。文件由各种源方随机存放到FTP站点。在下载之前,我需要一种能够检测FTP站点上的文件是否已完全由源方传输的方法。关于如何解决这个问题的任何想法?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

如果您可以控制客户端,那么更安全,更清洁,更有效的方法是让客户执行以下操作:

  1. 将文件上传到.... / partial / somefile
  2. 将.... / partial / somefile重命名为.... / complete / somefile
  3. 这会导致文件一次性显示在后一个目录中,因此您只需扫描该目录即可。如果你想要一个非轮询解决方案,你甚至可以要求OS通知该目录的新增内容。

答案 1 :(得分:2)

如果您无法操纵FTP服务器本身,我想到的唯一检查方法是轮询文件大小,如果文件大小没有更改,则可以确定上传已完成。但没人能保证。理想情况下,您可以调整FTP服务器,并在完成一些上传后使其执行一些脚本。

一些伪代码:

my %filesizes;
my %processed;

sub poll {
    foreach (@files_on_ftp) {
         if($_->filesize == $filesizes{$_->filename} and not $processed{$_->filename}) {
             process($_);
             $processed{$_->filename)++;
         }
    }
}

答案 2 :(得分:2)

像池上的解决方案一样取决于客户端:

  1. 首先是文件上传
  2. 如果完成,客户端上传空标志文件(如file.name.txt.finished
  3. 当您看到finished - 文件时,您知道文件已准备就绪。