Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I'm using the File-Fetch method to retrieve several files of a fixed size. Is there anyway to display the progress of the download, either the percentage or the raw file size?

Thanks

Replies are listed 'Best First'.
Re: Showing Progress with File-Fetch?
by zentara (Cardinal) on Jun 06, 2008 at 14:29 UTC
    I don't know anything about File-Fetch, but if you want to show progress, your module will need a callback that hooks into the actual download of bytes. LWP has such a callback, so I will show it to you so you understand. See if File-Fetch has something similar (a callback for the download)
    #!/usr/bin/perl -w use strict; use LWP::UserAgent; # don't buffer the prints to make the status update $| = 1; my $ua = LWP::UserAgent->new(); my $received_size = 0; my $url = 'http://www.cpan.org/authors/id/J/JG/JGOFF/parrot-0_0_7.tgz' +; print "Fetching $url\n"; my $request_time = time; my $last_update = 0; my $response = $ua->get($url, ':content_cb' => \&callback, ':read_size_hint' => 8192, ); print "\n"; sub callback { my ($data, $response, $protocol) = @_; my $total_size = $response->header('Content-Length') || 0; $received_size += length $data; # write the $data to a filehandle or whatever should happen # with it here. my $time_now = time; # this to make the status only update once per second. return unless $time_now > $last_update or $received_size == $total_s +ize; $last_update = $time_now; print "\rReceived $received_size bytes"; printf " (%i%%)", (100/$total_size)*$received_size if $total_size; printf " %6.1f/bps", $received_size/(($time_now-$request_time)||1) if $received_size; }

    I'm not really a human, but I play one on earth CandyGram for Mongo