I would also recommend using PATH_INFO instead of a query string. This will
more reliably set the filename then the content disposition will.
The HTML would be:
<html>
<head>
<title>Untitled Page</title>
</head>
<body>
<a
href="javascript:window.location='cgi-bin/download.cgi/Upload-Background.gif'">picture
link</a>
</body>
</html>
I would agree that slurping the entire file is a bad idea. However you
don't need to use read. You can do it by setting $/ (the
INPUT_RECORD_SEPARATOR) to whatever block size you want.
The result looks like this:
#!/usr/bin/perl -w
use strict;
my $filename = $ENV{'PATH_INFO'};
my $path = "/images/$filename";
my $length = (stat($path))[7]; # the size, in bytes
binmode STDOUT;
print "Content-Length: $size\n";
print "Content-Disposition: attachment;filename=$filename\n";
print "Content-Type: application/octet-stream\n\n";
open (FILE, "< $path") || die("Can't open($filename): $!");
binmode(FILE);
# Use 4k blocks
$/ = \4_096;
print while <FILE>;
close (FILE);
exit;
--
Andy <[EMAIL PROTECTED]>