Hallo an alle Perl-Profis!
ich suche einen fix für das folgende Problem:
Ich will die Möglichkeit zum upload von Bildern zur Verfügung stellen. Der dazu verwendete Code läßt derzeit aber leider alle Dateitypen zu. Wie kann ich den folgenden Code ändern, so das nur jpeg, gif, jpg-Dateien geladen werden können. (Code für den upload, nachdem ein User die Datei auf seiner Festplatte gewählt hat)
Nicht gelöst wurde das Problem durch Einfügen von z.B. :
&oops unless (("$buffer=~m/.jpg$/i") or ("buffer=~m/.jpeg$/i") or ("$buffer=~m/.gif$/i"));
oder:
( $extension = $filename ) =~ s/.*.// ;
if ( $extension !~ /(giftifjpgbmp)/i ) {&oops("Only image files (gif, tif, jpg, bmp) allowed") ;
Hier der Code für den upload:
mkdir("$basedir", 0777) unless (-M "$basedir");
$ = 1;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
read(STDIN, $buffer, $ARGV[0]);
$buffer =~ /^(.+)\r\n/;
$bound = $1;
@parts = split(/$bound/,$buffer);
$filename=$parts[1];
$parts[1] =~ s/\r\nContent-Disposition.+\r\n//g;
$parts[1] =~ s/Content-Type.+\r\n//g;
$parts[1] =~ s/^\r\n//;
@subparts = split(/\r\n/,$parts[2]);
$directory = $subparts[3];
$directory =~ s/\r//g;
$directory =~ s/\n//g; #got the directory name
$filename =~ s/Content-Disposition: form-data; name="UploadedFile"; filename=//g;
@stuff=split(/\r/,$filename);
$filename = $stuff[1];
$filename =~ s/"//g;
$filename =~ s/\r//g;
$filename =~ s/\n//g;
@a=split(/\/,$filename);
$totalT = @a;
--$totalT;
$fname=$a[$totalT];
@a=split(///,$fname);
$totalT = @a;
--$totalT;
$fname=$a[$totalT];
@a=split(/:/,$fname);
$totalT = @a;
--$totalT;
$fname=$a[$totalT];
@a=split(/"/,$fname);
$filename=$a[0];
if($parts[1] !~ /[\w\d]/)
{
print "Content-Type: text/html\n\n";
print "<html>\n<title>Error!</title>\n";
print "<body bgcolor="#ffffff" text="#000000">\n";
print "You did not provide a file to be uploaded or it is empty.<BR>\n";
print "Press your browsers BACK button to try again.";
print "</html>\n";
exit 0;
}
$directory = $basedir;
open(REAL,">$directory$filename") &error($!);
binmode REAL;
print REAL $parts[1];
close(REAL);
if($windows ne 'yes') #chmod it for unix systems
{
chmod 777 $directory$filename
;