Loading ...
Sorry, an error occurred while loading the content.

File upload - doubles are not written

Expand Messages
  • Bruno Czekay
    Hi I ve noticed something strange. I ve created a site for some warehouse - they want to show their products and all related documentation. So there is a form
    Message 1 of 1 , Feb 21, 2004
    • 0 Attachment
      Hi

      I've noticed something strange. I've created a site for some warehouse - they
      want to show their products and all related documentation. So there is a form
      with 15 files for upload pdfs. During the tests I realised, that when uploading
      two identical files - only the first one is written. The rest has size 0. Is it
      the feature of HTTP, CGI.pm or Apache::ASP - or my code?

      //hashes definitions

      my %ki_pdf1 = qw (
      f_field f_filepdf1 postfix _ki1 db_field pdf1 del_field f_delpdf1 );
      ...
      my %ki_gfx1 = qw (
      f_field f_filegfx1 postfix _ki1 db_field gfx1 del_field f_delgfx1 );

      my %pats = ( "kat_item", [ \%ki_pdf1, \%ki_pdf2, ..., \%ki_pdf15, \%ki_gfx1 ] );


      sub upload_files {

      my $fileup;
      my $filehandle;
      my $i;
      my $in_buffer;
      my $ext;
      my $filecomm;
      my $count;
      for ( $i = 0 ; $i <= $#{$pats{$_[0]}} ; $i++ ) {
      if ( $form->{$pats{$_[0]}[$i]{f_field}} ) {
      $fileup = $Request->{FileUpload}{$pats{$_[0]}[$i]{f_field}};
      $filehandle = $fileup->{FileHandle};
      $_ = $fileup->{ContentType};
      SWITCH: {
      /image\/gif/ && do { $ext = ".gif"; $refresh = "yes"; last };
      /image\/jpeg/ && do { $ext = ".jpg"; $refresh = "yes"; last };
      /application\/pdf/ && do { $ext = ".pdf"; last };
      }
      my $localname = $_[1] . $pats{$_[0]}[$i]{postfix} . $ext;
      $localname =~ /\w/;
      $filehandle =~ /\w/;
      $count = 0;
      if ( sysopen( OUTPUT, "../files/" . $localname, 0x0601 ) ) {
      while ( read( $filehandle, $in_buffer, 2048 ) ) {
      print OUTPUT $in_buffer; $count++; }
      $Session->{ErrorMesg} .= "$count buffers written to file $localname";
      if ( $count == 0 ) { $Session->{ErrorMesg} .= "<b> - FAILED!</b><br>";
      } else { $Session->{ErrorMesg} .= "<br>"; }
      close OUTPUT;
      $msth = $mdbh->prepare(
      "UPDATE $_[0] SET $pats{$_[0]}[$i]{db_field}=? WHERE id=?" );
      $msth->execute( ( $_[1] . $pats{$_[0]}[$i]{postfix} . $ext ), $_[1] );
      }
      }
      $filecomm = ( $pats{$_[0]}[$i]{f_field} . "desc" );
      if ( $form->{$filecomm} ) {
      $msth = $mdbh->prepare(
      "UPDATE $_[0] SET " . $pats{$_[0]}[$i]{db_field} .
      "desc=? WHERE id=?" );
      $msth->execute( $form->{$filecomm}, $_[1] );
      }
      }
      }

      So, example call looks like this

      sub save_kat {
      //read data from text fields in form and insert it into database
      //$prefix = item id in the database, smallint
      upload_files( "kat_item", $prefix );
      }

      Regards

      --
      CPU hotplug is not for removing the processor from single-CPU x86 box.
      Kiddie: "The new kernel has CPU hotplug support, here, watch... oh CRAP."

      Bruno Czekay - bruno(at)domar.pl

      ---------------------------------------------------------------------
      To unsubscribe, e-mail: asp-unsubscribe@...
      For additional commands, e-mail: asp-help@...
    Your message has been successfully submitted and would be delivered to recipients shortly.