106 lines
2.4 KiB
Plaintext
Executable File
106 lines
2.4 KiB
Plaintext
Executable File
#!/usr/local/bin/perl5
|
|
|
|
# Simple example that displays the data associated with
|
|
# the "readme" file field in a multiform/form-data request.
|
|
|
|
use CGI::Lite;
|
|
|
|
$cgi = new CGI::Lite;
|
|
|
|
# Die if the directory is invalid (i.e doesn't exist, can't
|
|
# read or write to it, or is not a directory).
|
|
|
|
$cgi->set_directory ("/tmp") || die "Directory doesn't exist.\n";
|
|
|
|
# Set the platform. "Unix" is the default. The method accepts
|
|
# platforms in a case insensitive manner, so you can pass
|
|
# "UNIX", "Unix", "unix", etc.
|
|
|
|
$cgi->set_platform ("Unix");
|
|
|
|
# Set the buffer size to 1024 bytes (1K). This is the default.
|
|
|
|
$cgi->set_buffer_size (1024);
|
|
|
|
# Let's change the way uploaded files are named!
|
|
|
|
$cgi->filter_filename (\&my_way);
|
|
|
|
# Tell the module to return filehandles.
|
|
|
|
$cgi->set_file_type ('handle');
|
|
|
|
# We want CGI::Lite to perform EOL conversion for all files that have the
|
|
# following MIME types:
|
|
#
|
|
# application/mac-binhex40
|
|
# application/binhex-40
|
|
#
|
|
# so, we use the add_mime_type method. In addition, we don't want
|
|
# files of MIME type: text/html to be converted. I'm sure you wouldn't
|
|
# want to do that in real life :-)
|
|
|
|
$cgi->add_mime_type ('application/mac-binhex40');
|
|
$cgi->add_mime_type ('application/binhex-40');
|
|
$cgi->remove_mime_type ('text/html');
|
|
|
|
# Let's go ahead and parse the data!
|
|
|
|
$data = $cgi->parse_form_data;
|
|
|
|
print "Content-type: text/plain", "\n\n";
|
|
|
|
if ($cgi->is_error) {
|
|
$error_message = $cgi->get_error_message;
|
|
|
|
print <<End_of_Error;
|
|
|
|
Oops! An error occurred while uploading the file. Please go back
|
|
and try to upload the file again. In the meanwhile, you may
|
|
want to report the following error to the Webmaster:
|
|
|
|
$error_message
|
|
|
|
Sorry, and thanks for being patient!
|
|
|
|
End_of_Error
|
|
|
|
} else {
|
|
|
|
# Dereferences the variable to get a filehandle. Then,
|
|
# iterates through the file, displaying each line to STDOUT.
|
|
#
|
|
# NOTE: $readme also contains the name of the file.
|
|
|
|
$readme = $data->{readme};
|
|
|
|
print <<End_of_Header;
|
|
|
|
Thanks for uploading the file: $readme to our server. Just
|
|
in case you're interested, here are the contents of your uploaded
|
|
file:
|
|
|
|
End_of_Header
|
|
|
|
while (<$readme>) {
|
|
print;
|
|
}
|
|
|
|
# Make sure to close the file!
|
|
|
|
$cgi->close_all_files;
|
|
}
|
|
|
|
exit (0);
|
|
|
|
sub my_way
|
|
{
|
|
my $file = shift;
|
|
|
|
$file =~ tr/A-Z/a-z/; # Upper to lowercase
|
|
$file =~ s/(?:%20)+/_/g; # One or more spaces to "_"
|
|
$file =~ s/%[\da-fA-F]{2}//g; # Remove all %xx
|
|
|
|
return ($file);
|
|
}
|