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]>

Reply via email to