################################################################################
## Process Uploaded File
################################################################################
if(-d $session_dir){
# Das hatten wir oben schon.
# my $query = new CGI;
my $file_name = $cgi->param("filename");
$file_name =~ s/.*[:\/\\](.*)/$1/; # Den Doppelpunkt für die Macs
my $upload_file_path = $upload_dir.$file_name;
my $upload_filehandle = $cgi->upload("filename");
my $tmp_filename = "upl_".$$.$file_name; # TemporärDatei mit der PID
# close($upload_filehandle);
use Fcntl qw/:flock/;
# Fcntl auf flock begrenzen, das spart speicher, weil das eine
# ausgewachsene Bibliothek ist, die wir nicht in voller Größe
# brauchen.
# Maximum Uploadgröße 2MB (oder bei bedarf mehr).
$CGI::POST_MAX = 1024 * 2048;
open F, ">", $tmp_filename || &err_msg ( $upl_err."
$!" ); # Mein ErrorHandler
flock F, LOCK_EX; # Datei sperren.
binmode $tmp_filename; # Zur Sicherheit in den Binärmodus schalten.
binmode F;
while ( read $tmp_filename, my $buf, 1024 ) { print F $buf; }
flock F, LOCK_UN; # Datei wieder freigeben.
close F;
# Und ganz wichtig: Den Inhalt der hochgeladenen Datei abprüfen.
# Entsprechend den Vorgaben, was da hochgeladen werden darf.
unless ( &chk_filecontent($tmp_filename) ) { exit; }
else {
use File::Copy;
print "Moving File to Upload Directory -> ";
if ( move ( $tmp_filename, $upload_file_path ) ) {
print "Success
";
}
else {
print "Failure
";
}
} # End unless chk_filecontent
} # End if -d session_dir
sub chk_fileconent {
$file = shift || return;
# Hier jetzt Pseudocode!!!
return ($file eq "OK") ? 1 : 0;
}