You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Amiri Barksdale <am...@gmail.com> on 2007/07/31 18:22:05 UTC
Multiple File Uploads: $r or %ARGS?
Hey folks. I'm new here, and this is my first post.
I'm trying to figure out a way to manage multiple file uploads. I
have a form that allows users to upload arbitrary numbers of files,
which I then need to process and save on the server. I have a
javascript that allows this arbitrary number of files: by clicking a
link, you create a new form field that adds a numeral to the end of
the field name. The %ARGS hash looks like this for a single file:
file => 273141
title => Back to
id => 7
number => 1
creation_date => 2007
A multiple upload %ARGS looks like this:
file => 273141
title => Back to
id => 7
number => 1
creation_date => 2007
file-2 => that'shot8
title-2 => Natural
id-2 => 6
number-2 => 2
creation_date-2 => 1985
file-3 => Introduction
title-3 => Stuff Like This
id-3 => 12
number-3 => 3
creation_date-3 => 1998
I created a loop that allows me to handle the %ARGS data:
my $i = 2;
while ( $i <= $ARGS{'numberfiles'} ) {
my %thash;
foreach my $key ( sort( keys %ARGS ) ) {
if ( $key =~ /creation_date-$i/ ) {
$thash{'creation_date'} = $ARGS{$key};
}
if ( $key =~ /title-$i/ ) {
$thash{'title'} = $ARGS{$key};
}
if ( $key =~ /number-$i/ ) {
$thash{'number'} = $ARGS{$key};
}
if ( $key =~ /rate-$i/ ) {
$thash{'rate'} = $ARGS{$key};
}
if ( $key =~ /type-$i/ ) {
$thash{'type'} = $ARGS{$key};
}
if ( $key =~ /id-$i/ ) {
$thash{'id'} = $ARGS{$key};
}
if ( $key =~ /file-$i/ ) {
$thash{'file'} = $ARGS{$key};
}
}
my $nfile = $api->newBean('file');
}
$nfile->save($api);
$i++;
}
But the problem is handling the actual files simultaneous with this
file information. I have been trying to construct some sort of loop
to go through each $r->upload->tempname object, but it seems like the
only way to do that is to make it an entirely separate loop. Which
gets kludgier and kludgier, because my object-oriented perl requires
that I make a "mini hash" out of every file uploaded--the %thash
above. I know there has to be an elegant way to do this: I just don't
know it.
Is it possible to use the Apache::Request object instead of %ARGS
altogether? Could I handle the file data and the files together using
$r instead of taking the info from %ARGS here and trying to take the
data from $r there?
Has anyone been faced with this problem before? All comments and
help, insights and wisdom, would be greatly appreciated.
Amiri