CGI upload et tmpFileName()

CGI upload et tmpFileName() - Perl - Programmation

Marsh Posté le 22-08-2006 à 11:37:10    

Bonjour à tous,
 
Je souhaite uploader un fichier excel (>5Mo) sur un serveur du réseau local.
Pour celà, j'utilise l'upload du module CGI (CGI.pm)
 
Je bloque actuellement sur tmpFileName(), passage obligatoire pour pouvoir faire un copy sur le serveur après l'upload.
Voilà mon code : formulaire HTML et script perl :
 
HTML :

Code :
  1. <form name="uploadForm" action="" method="post" enctype="multipart/form-data">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="2097152">
  3. <input type="file" size="50" name="uploaded_file" accept="text/*" maxlength="2097152">
  4. <input type="Submit" value="Upload" name="uploadPL" >
  5. </form>


 
J'ai aussi essayé en CGI mais ça ne change rien :

Code :
  1. print $vbuf->start_multipart_form(
  2.    -action => "",
  3.    -method => "post",
  4.    -id => "uploadForm",
  5.    -name => "uploadForm"
  6.    );
  7.    
  8.     print my $fileSelect = $vbuf->filefield(
  9.        -name =>'uploaded_file',
  10.        -default=>'starting value',
  11.        -size=>50
  12.       );
  13.     print('<input type="Submit" value="Upload" name="uploadPL" >');
  14.     print end_form();


 
 
 
 
Et voilà le script Perl:
 

Code :
  1. my $uploaded_file=param('uploaded_file');
  2.     if( $uploaded_file ne "" )
  3.     {
  4.     my $file=upload('uploaded_file');
  5.     print "file: ".$file."<br>";
  6.     my $localfilename=tmpFileName($file);
  7.     print "localfilename: ".$localfilename."<br>";
  8.     copy( "$localfilename", "F:\www\tmp\.$file" );
  9.     }
  10. }


 
Je récupère $uploaded_file qui m'affiche le nom du fichier, comme voulu
$file m'affiche également le nom du fichier (?)
et ... $localfilename ne m'affiche strictement rien  
 
ça bloque à ce niveau là, je n'ai pas de fichier temporaire sur le serveur, en ayant créé une variable d'envirronnement TMPDIR comme indiquer dans les différents perldoc que j'ai rencontré sur le net
 
Voilà un peu d'aide serait bienvenue ;)
 
see you
 
 

Reply

Marsh Posté le 22-08-2006 à 11:37:10   

Reply

Marsh Posté le 22-08-2006 à 14:47:49    

Bon j'ai essayé ça :  

Code :
  1. my $uploaded_file = $vbuf->param('uploaded_file');
  2. my $buffer;
  3.   open (OUTFILE,">>F:\\www\\tmp\\$uploaded_file" );
  4. while (my $bytesread=read($uploaded_file,$buffer,10000000)) {
  5.    print OUTFILE $buffer;
  6.   }
  7.        close $uploaded_file;


 
A priori j'arrive à créer le fichier et à récupérer les données d'un petit .txt de 1ko, mais lorsque j'essaye avec un fichier excel de 1Mo j'ai une corruption de données (et c'est biensur pour un fichier excel que je veux uploader)
 
... any ideas ?

Reply

Marsh Posté le 22-08-2006 à 15:05:33    

Je me réponds tout seul ... :)
A titre d'information, j'ai résolu le problème, il faut transmettre en binaire et non ascii ..

Code :
  1. my $buffer;
  2.   open (OUTFILE,">>F:\\www\\tmp\\$uploaded_file" );
  3.   binmode OUTFILE;
  4. while (<$uploaded_file> ) {
  5.    print OUTFILE;
  6.   }
  7.        close $uploaded_file;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed