CGI can also be used to allow users to upload files. Your trainer will demonstrate and discuss this. Source code for this example is available in your cgi-bin directory as upload.cgi
First off, you need to specify an encoding type in your form element. The attribute to set is ENCTYPE="multipart/form-data".
<html> <head> <title>Upload a file</title> </head> <body> <h1>Upload a file</h1> Please choose a file to upload: <form action="upload.cgi" method="POST" enctype="multipart/form-data"> <input type="file" name="filename"> <input type="submit" value="OK"> </form> </body> </html> |
CGI handles file uploads quite easily. Just use param() as usual. The value returned is special -- in a scalar context, it gives you the filename of the file uploaded, but you can also use it in a filehandle.
#!/usr/bin/perl -w use strict; use CGI 'param'; my $filename = param('filename'); my $outfile = "outputfile"; print "Content-type: text/html\n\n"; # There will probably be permission problems with this open # statement unless you're running under cgiwrap, or your script # is setuid, or $outfile is world writable. But let's not worry # about that for now. open (OUTFILE, ">$outfile") || die "Can't open output file: $!"; # This bit is taken straight from the CGI.pm documentation -- # you could also just use "while (<$filename>)" if you wanted my ($buffer, $bytesread); while ($bytesread=read($filename,$buffer,1024)) { print OUTFILE $buffer; } close OUTFILE || die "Can't close OUTFILE: $!"; print "<p>Uploaded file and saved as $outfile</p>\n"; print "</body></html>"; |