SPUG: mod_perl download handler help needed

Alan alan at ufies.org
Thu Nov 14 13:52:16 CST 2002


Hi folks, been working on a little project and I've run into a bit of a
snag.  What I'm doing is designing a file tracker for a client.
Basically when someone downloads a a file (/files/foo.pdf) it pops up a
window, gets a name and email, then (when that is complete) gives them
the file.

To do this what I've done is put a handler on /files that:
 - checks to make sure the file exists and is readable
 - displays an html page with a form action of /files/$filename and a
   hidden field of 'returnto' set to $filename
 - when the submit button is pressed, it submits back to
   /files/$filename, and because the handler is on /files it catches it
   again
 - if the name and email are not filled in, displays the form again
 - if they are filled in, it sends an email to whoever gets the job of
   watching for file downloads, and then uses the following code to 
   display the file:

	   	my $filepath = $r->document_root . "/files/" .
	   	$params{returnto};
		$r->send_http_header($r->lookup_file($filepath)->content_type);
		my $fh = Apache::gensym();
		open($fh, "$filepath") || return NOT_FOUND;
		$r->send_fd($fh);
		close($fh);
		return OK;

This all works just great..... *until the user tries to download the
file*.  Because the browser doesn't grab from the cache (tried both ie6
and mozilla) the file that is downloaded is the html form because I
assume, it's seeing the request again, and sending back the html form.

I've tried sticking the parameters on the URL
(foo.com/files/foo.pdf?name=abc&email=bcd), but then it seems to send me
back a file with a mime type of httpd/unix-directory (sending the /files 
directory I'm guessing).

Is there a better way to do this?  I'd rather not have the download link
be something like "download.cgi?file=foo.pdf", but if needed I'll revert
to that.  I'd just rather have it work a little more seamlessly than
that.

Anyway, if anyone has any ideas I'd love to hear them :)

alan

-- 
Alan <alan at ufies.org> - http://arcterex.net
---------------------------------------------------------------------
"The only thing that experience teaches us is that experience teaches 
us nothing.	        -- Andre Maurois (Emile Herzog)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org




More information about the spug-list mailing list