#!/usr/bin/perl -w # Module die benötigt werden use strict; use CGI::Carp qw(fatalsToBrowser); use CGI; use DBI; use upload_functions; # lokale Datendeklaration my $cgi; my $userid; my $uploadid; my $uploadfile; my $filesize; my $database; my $sql; my $presql; my %get_params; my $filename; my $imagename; my $filetype; my $filehandle; my $data; # Programm ---------------------------------------------------------------------------------- # Datenbankverbindung aufbauen $database = DBI->connect( "dbi:mysql:***", "***", "***" ) || die "Database connection not made: $DBI::errstr"; # Hole Parameter %get_params = parse_query_string($ENV{'QUERY_STRING'}); # 1. Schritt: Speichern der Dateigröße in Datenbank ######################################### # Hole Userid und Uploadid wenn vorhanden $userid = $get_params{'userid'}; $uploadid = $get_params{'uploadid'}; # Dateigröße ermitteln $filesize = $ENV{'CONTENT_LENGTH'}; # Dateigröße in Datenbank speichern $sql = "UPDATE Upload SET Size = ? WHERE UploadID = ? AND UserID = ?"; $presql = $database->prepare( $sql ); $presql->execute($filesize, $uploadid, $userid); $presql->finish(); # 2. Schritt: Lege benötigte Ordner an ###################################################### # Wechsel ins tempUploads-Verzeichnis chdir("../tempUploads"); # Erstelle Userverzeichnis, falls noch nicht vorhanden if(!-d $userid){ # Userverzeichnis existiert noch nicht -> Anlegen mkdir($userid, 0777); } # Wechsel ins Userverzeichnis chdir($userid); # Erstelle Verzeichnis zu Uploadid -> das darf es definitv noch nicht geben! mkdir($uploadid, 0777); # Wechsel ins Uploadidverzeichnis chdir($uploadid); # 3. Schritt: Lege Datei ins Verzeichnis #################################################### # Lade CGI-Objekt und setzte maximale Uploadgröße $cgi = new CGI; $cgi::POST_MAX = 100000000; # Hole Dateihandle $filehandle = $cgi->upload("uploadfile"); # Dateinamen erstellen $filename= $uploadid . '_org'; ($imagename,$filetype) = split(/\./, $filehandle); $filename = $filename.".".$filetype; # Datei ins Verzeichnis schreiben open UPLOADFILE, ">$filename" or die 'Fehler beim Schreiben der Datei'; # Binmode für Upload festlegen binmode $filehandle; binmode uploadfile; # Datei mittels while durchlaufen... while ( read $filehandle,$data,1024 ) { # ... und schreiben print UPLOADFILE $data; } # Datei schließen close UPLOADFILE; close($filehandle); # Zugriffsrechte setzen chmod(0777, $filename); # 4. Schritt: Verbuche den Uploaderfolg in Datenbank ######################################## $sql = "UPDATE Upload SET Uploaded = 1 WHERE UploadID = ? AND UserID = ?"; $presql = $database->prepare( $sql ); $presql->execute($uploadid, $userid); $presql->finish(); $database->disconnect(); # 5. Schritt: Weiterleitung ################################################################# my $url = "../index.php"; print "Location: $url\n\n"; exit;