--- Janek Schleicher <[EMAIL PROTECTED]> wrote:
> I'm also not an expert of uploading files.
> But you do two things to read the file:
> 
> $file = $q->param("file$i");
> Now $file contains a string.
> 
> Then you use something like
> my $uploaded = <$file>;
> 
> So now you use $file as a Filehandle,
> but in fact it's still a simple stupid string.

It would seem that way, but this is not the case.  From the CGI.pm documentation:

    When the form is processed, you can retrieve the entered filename
    by calling param(): 

       $filename = $query->param('uploaded_file');
   
    [snip]

    The filename returned is also a file handle. You can read the 
    contents of the file using standard Perl file reading calls: 

        # Read a text file and print it out
        while (<$filename>) {
           print;
        }

This has long been a convenience provided for by the CGI module.


> > for some reason when, I do this it doesnt print any thing, it just makes the file.

Offhand, I don't see anything wrong with the code.  I have two questions:  can you 
show us the
HTML and are you using enctype="multipart/form-data" in your form tag?

Here's a quick rewrite of how I would probably lay this out.  There's still some more 
stuff that
can be done here, but this should get you going.  Feel free to ask "why" I did 
something the way
that I did.

  use File::Basename;

  # later

  my $files_uploaded = uploadfiles( $q, \%user );

  sub uploadfile {
      my ( $q, $user ) = @_;
      # localize $_ so we don't step on it outside of the block
      local $_;
      my $file_count = 0;
      for ( 1 .. 5 ) {
          if ( my $file = $q->param( "file$_" ) {
              my $filename = basename( $file );
              open FILE, "> $user->{'site_id'}/$filename" or error(...);
              binmode $file;
              print FILE <$file>;
              $file_count++;
          }
          close FILE or die $!;
      }
      return $file_count;
  }

Cheers,
Curtis "Ovid" Poe

=====
"Ovid" on http://www.perlmonks.org/
Someone asked me how to count to 10 in Perl:
push@A,$_ for reverse q.e...q.n.;for(@A){$_=unpack(q|c|,$_);@a=split//;
shift@a;shift@a if $a[$[]eq$[;$_=join q||,@a};print $_,$/for reverse @A

__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to