thoughts has asked for the wisdom of the Perl Monks concerning the following question:
I'm trying to use CGI::upload_hook() to implement a progress meter for file uploads. Using the code from CGI.pm's documentation doesn't work at all:
$q = CGI->new(); $q->upload_hook(\&hook); sub hook { my ($filename, $buffer, $bytes_read) = @_; print STDERR "Read $bytes_read bytes of $filename\n"; }
That's straight from the docs, except that I changed it to print to STDERR, and I removed "$data", which the docs randomly pass into upload_hook() but don't explain at all. The problem is that it doesn't do anything; nothing ever gets printed to STDERR, though the file gets completely uploaded.
I've been searching on Google for a couple hours and have found not a single working example of this feature of CGI.pm. The one that comes close is this other perlmonks thread Understanding CGI::upload_hook() ;. In it, the author asks basically my same question, and gets a reply from someone with a "working" example; however the example code doesn't run on either of the two servers I tried it on (both Linux/Apache without mod_perl), though it works on its author's homepage. But the example code isn't particularly simple, and all I'm interested in is the upload_hook portion; I don't want to try to debug the example package.
The example package calls the hook differently than the CGI.pm docs suggest:
my $query = CGI->new(\&hook);
When I try that in my code, I have only slightly more success: the hook does get called, but not until the file is almost completely finished uploading. It's a 2MB photo that takes about 60 seconds to upload on my connection, but the hook only get called during the last ~5 seconds -- during those 5 seconds, it gets called a few hundred times, starting with a $bytes_read value of zero, as if the entire upload didn't happen until those final 5 seconds. (I am monitoring the outgoing traffic on my workstation, so I know that isn't the case.)
What I'm looking for is a simple CGI script or function that shows upload_hook being used successfully. By simple, I mean not a module, not a full-blown package with XML config files and a database-backed caching system, etc. Just a few lines of code would be great.
I can post my full non-working example in a reply if that is helpful.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: simple CGI::upload_hook() guide or example?
by cees (Curate) on Oct 12, 2005 at 17:52 UTC | |
by thoughts (Initiate) on Oct 12, 2005 at 21:03 UTC | |
by cees (Curate) on Oct 12, 2005 at 21:11 UTC | |
by thoughts (Initiate) on Oct 12, 2005 at 21:47 UTC | |
|
Re: simple CGI::upload_hook() guide or example?
by cees (Curate) on Oct 12, 2005 at 17:28 UTC |