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

Reply via email to