> I am writing a program that needs to process form data, (here's
> the kicker) which is sometimes multipart/form-data, then
> redirect a user to a GET request (which doesn't need to process
> the form data). I would like to use the standard mechanism for
> issuing a redirect, for other reasons:
>
> $r->header_out('Location' => $url);
> return REDIRECT;
>
Not sure what the problem is, but I frequently use REDIRECTs and receive both
"normal" and "multipart" posts.
Please find the code section below that I use to get the POSTed data. After
that, in order to REDIRECT, I use
$r->content_type('text/html');
$r->header_out(Location =>
'http://'.$ENV{'HTTP_HOST'}.$disurl);
return REDIRECT;
Hope this helps.
Enjoy,
- Gerd.
============ Getting all kind of posted stuff:
my $buffer;
$r->read($buffer,$r->header_in('Content-length'));
unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si)
{
my @pairs=split(/&/,$buffer);
my $pair;
foreach $pair (@pairs) {
my ($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$ENV{"form.$name"}=$value;
}
} else {
my $contentsep=$1;
my @lines = split (/\n/,$buffer);
my $name='';
my $value='';
my $fname='';
my $fmime='';
my $i;
for ($i=0;$i<=$#lines;$i++) {
if ($lines[$i]=~/^$contentsep/) {
if ($name) {
chomp($value);
if ($fname) {
$ENV{"form.$name.filename"}=$fname;
$ENV{"form.$name.mimetype"}=$fmime;
} else {
$value=~s/\s+$//s;
}
$ENV{"form.$name"}=$value;
}
if ($i<$#lines) {
$i++;
$lines[$i]=~
/Content\-Disposition\:\s*form\-data\;\s*name\=\"([^\"]+)\"/i;
$name=$1;
$value='';
if ($lines[$i]=~/filename\=\"([^\"]+)\"/i) {
$fname=$1;
if
($lines[$i+1]=~/Content\-Type\:\s*([\w\-\/]+)/i) {
$fmime=$1;
$i++;
} else {
$fmime='';
}
} else {
$fname='';
$fmime='';
}
$i++;
}
} else {
$value.=$lines[$i]."\n";
}
}
}
$r->method_number(M_GET);
$r->method('GET');
$r->headers_in->unset('Content-length');
>
begin:vcard
n:Kortemeyer;Gerd
tel;fax:(517) 432-2175
tel;work:(517) 432-5468
x-mozilla-html:FALSE
url:http://www.lite.msu.edu/kortemeyer/
org:LITE Lab;DSME MSU
version:2.1
email;internet:[EMAIL PROTECTED]
title:Instructional Technology Specialist
adr;quoted-printable:;;123 North Kedzie Labs=0D=0AMichigan State University;East Lansing;MI;48824;USA
fn:Gerd Kortemeyer
end:vcard