in reply to Monitor transfers with Net::FTP

Check out the Hash attribute (and hash method) in Net::FTP.

-derby

Replies are listed 'Best First'.
Re^2: Monitor transfers with Net::FTP
by jellisii2 (Hermit) on Aug 17, 2009 at 19:33 UTC
    How do you implement this to where the transfer doesn't just stop the script as it does it?

    Since I'm on win32 I can't do a fork, and running in a separate thread seems to cause problems when the thread gets returned, crashing wickedly.

    EG:

    while ($ftp->put($file)) { warn "Still putting data!\n"; $ftp->hash("", 1); }

    Doesn't work as expected, printing hashes on stdout during the transfer.

      That's not how you invoke it. Either make your constructor like such:

      my $ftp = Net::FTP->new( "some.host.name", Hash => 1);
      Or before you call put call the hash method:
      $ftp->hash( 1 );

      -derby
        I actually found a better way for my particular situation, that I surprisingly couldn't find in the monk's search setup:

        my @file_name = split /\//, $i; my $xfer_handle = $ftp->stor($file_name[-1]); my $bytes_read = 0; my $buffer = ""; my $bytes = 0; my @file_info = stat($i); sysopen(FILE, $i, 0); binmode(FILE); while (($bytes_read = sysread(FILE, $buffer, 1024)) != 0) { $xfer_handle->write($buffer, $bytes_read); $bytes = $bytes + 1024; if ($bytes > $file_info[7]) { $bytes = $file_info[7]; } print "wrote $bytes of $file_info[7] so far...\n"; } my $check_xfer = $xfer_handle->close();
        $xfer_handle->close() returns a 1 if the server reports a 2xx code.