[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.