http://www.perlmonks.org?node_id=106748
Category: CGI Programming
Author/Contact Info
Description:

This creates a form for a file upload, receieves the file and then puts the file back out to the browser.

Capturing and storing the file is left as an excersize for the reader.

It does capture the salient points about getting the file in and out.

#!/usr/bin/perl

use strict;
use CGI -private_tempfiles;
$CGI::POST_MAX=1024*1024;       # limit to 1 megabyte per form posting
                                #disables checking for $q->param()

my $q=CGI->new();

if($q->param())
{
        my $fh=$q->upload('uploaded_file', -override=>1);
        unless($fh)
        {
                print $q->header, $q->html("Invalid File", $q->p("Inva
+lid File"));
                exit;
        }
        my $type=$q->uploadInfo($fh)->{'Content-Type'};
        seek($fh, 0, 2);
        my $size=tell($fh);
        seek($fh, 0, 0);
        print STDERR "File Input: $fh, $type, $size\n";
        print $q->header(-type=>"$type");
        print $q->start_html('Your file')       if($type =~ /text/);
        while(<$fh>)
        {
                print;
        }
        print $q->end_html()    if($type =~ /text/);
                
}
else
{
        print $q->header(-type=>'text/html'), $q->html('upload file', 
                $q->start_multipart_form(),
                $q->filefield(-name=>'uploaded_file', -default=>'start
+ing', -override=>1, -size=>50, -maxlength=>80),
                $q->hidden("uni", time()),
                $q->submit("Ok"),
                $q->end_multipart_form(),
        );
}