>
> CGI uses either of HTTP GET or HTTP PUT to obtain form filled data.
>
GET or POST.
It uses PUT for file uploads. Here is a sample of file Upload CGI.
$ cat upld
#!/usr/bin/perl
use CGI;
use CGI::Carp qw ( fatalsToBrowser );
use File::Basename;
use Sys::Syslog;
$CGI::POST_MAX = 1024 * 5000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $query = new CGI;
print $query->header ( );
$upload_dir = "/var/www/htdocs/upload/";
my @upload_files = $query->upload("file_upload");
my (@sha1sums, @md5sums, @sizes) = ();
for $upload_filehandle (@upload_files) {
$filename = $upload_filehandle;
if ( !$filename )
{
print $query->header ( );
print "There was a problem uploading your file (try a
smaller file).";
exit;
}
my ( $name, $path, $extension ) = fileparse ( $filename, '\..*' );
$filename = $name . $extension;
$filename =~ tr/ /_/;
$filename =~ s/[^$safe_filename_characters]//g;
if ( $filename =~ /^([$safe_filename_characters]+)$/ )
{
$filename = $1;
}
else
{
die "Filename contains invalid characters";
}
open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
}
The CGI can only be called from a HTML file input form element.
You have to construct the HTML page like this:
<form action="/cgi-bin/upld" method="POST">
<input type="file"></input>
<input type="submit">Upload</input>
</form>
On form submit the file is uploaded.
But today with js and jQuery you need not wait till submit is pressed.
In fact I don't use submit at all. I use simple HTML buttons.
-Girish
_______________________________________________
ILUGC Mailing List:
http://www.ae.iitm.ac.in/mailman/listinfo/ilugc