有兴趣的朋友还可以研究一下perl 5写的 upload files :
----------------------------------------------------------------------------------------
#!/usr/local/bin/perl -Tw
# Copyright (c) 1996 Steven E. Brenner
# $Id: fup.cgi,v 1.2 1996/03/30 01:33:46 brenner Exp $
require 5.001;
use strict;
require "./cgi-lib.pl";
MAIN:
{
my (%cgi_data, # The form data
%cgi_cfn, # The uploaded file(s) client-provided name(s)
%cgi_ct, # The uploaded file(s) content-type(s). These are
# set by the user's browser and may be unreliable
%cgi_sfn, # The uploaded file(s) name(s) on the server (this machine)
$ret, # Return value of the ReadParse call.
$buf # Buffer for data read from disk.
);
# When writing files, several options can be set..
# Spool the files to the /tmp directory
$cgi_lib::writefiles = "/tmp";
# Limit upload size to avoid using too much memory
$cgi_lib::maxdata = 50000;
# Start off by reading and parsing the data. Save the return value.
# Pass references to retreive the data, the filenames, and the content-type
$ret = &ReadParse(\%cgi_data,\%cgi_cfn,\%cgi_ct,\%cgi_sfn);
# A bit of error checking never hurt anyone
if (!defined $ret) {
&CgiDie("Error in reading and parsing of CGI input");
} elsif (!$ret) {
&CgiDie("Missing parameters\n",
"Please complete the form
fup.html.\n");
} elsif (!defined $cgi_data{'upfile'} or !defined $cgi_data{'note'}) {
&CgiDie("Data missing\n",
"Please complete the form
fup.html.\n");
}
# Now print the page for the user to see...
print &PrintHeader;
print &HtmlTop("File Upload Results");
print <
You've uploaded a file. Your notes on the file were:
$cgi_data{'note'}
The file has been spooled to disk as: $cgi_data{'upfile'}
The file's reported name on the client machine is:
$cgi_cfn{'upfile'}
The file's reported Content-type (possibly none) was:
$cgi_ct{'upfile'}
The contents of $cgi_data{'upfile'} are as follows:
EOT
# Print the contents of the uploaded file
open (UPFILE, $cgi_sfn{'upfile'}) or
&CgiError("Error: Unable to open file $cgi_sfn{'upfile'}: $!\n");
$buf = ""; # avoid annoying warning message
while (read (UPFILE, $buf, 8192)) {
# Munge the uploaded text so that it doesn't contain HTML elements
# This munging isn't complete -- lots of illegal characters are left
# However, it takes care of the most common culprits.
$buf =~ s/</g;
$buf =~ s/>/>/g;
print $buf;
}
close (UPFILE);
print "
\n";
unlink ($cgi_sfn{'upfile'}) or
&CgiError("Error: Unable to delete file",
"Error: Unable to delete file $cgi_sfn{'upfile'}: $!\n");
# cleanup - delete the uploaded file
# Note that when using spooling of files to disk, the uploaded file's
# name on the server machine is in both %cgi_data and %cgi_sfn
# (that is, the first and fourth parameters to ReadParse). However,
# for technical reasons, the data in %cgi_data are tainted. The data in
# %cgi_sfn are not tainted, but the keys can contain only a limited
# set of characters ([-\w] in cgi-lib 2.8)
print "
File $cgi_data{'upfile'} has now been removed\n";
print &HtmlBot;
# The following lines are solely to suppress 'only used once' warnings
$cgi_lib::writefiles = $cgi_lib::writefiles;
$cgi_lib::maxdata = $cgi_lib::maxdata;
}
----------------------------------------------------------------------------------------------------