A bit late I know but I'm sure someone will find this useful...I had to write my own when I found out that my version of CGI.pm didn't handle uploads. This is what I came up with for a M$Windwoes application
binmode STDIN;
read (STDIN, my ($cgidata), $ENV{'CONTENT_LENGTH'}) or doerror("Corrup
+t CGI header!");
my ($boundary) = $ENV{'CONTENT_TYPE'} =~ /boundary=(\S+)/;
my (@form) = split /\x0d?\x0a?--$boundary-?-?\x0d\x0a/, $cgidata;
for (@form) {
if ($_ =~ /content-type:/i) {
my ($details, $file) = split /\x0d\x0a\x0d\x0a/, $_, 2;
$details =~ s/\x0d//gs;
my ($MIME) = $details =~ /content-type: (.*)$/i;
my ($name) = $details =~ /\sname="([^"]+)/i;
if ($MIME =~ /jpe?g/i) { $image{$name} = $file }
else { $textfile{$name} = $file }
}
else {
my ($element, $value) = split /\x0d\x0a\x0d\x0a/, $_, 2;
($element) =~ /\sname="([^"]+)/i;
$form{$1} = $value;
}
}
This code is specifically for JPEGs and TEXT upload but could easily be modified and will also parse form elements so you end up with %image %textfile and %form. |