ftp probleme upload consécutifs

ftp probleme upload consécutifs - Java - Programmation

Marsh Posté le 18-03-2009 à 22:37:13    

Bonjour,  
 
Je suis en train de développer une applet d'upload ftp et je me penche sur l'upload de dossiers.
Pour cela, j'utilise les inputstream et outputstream et la classe FTPClient de org.apache.commons.net.ftp.
 
Pour uploader un fichier, cela fonctionne mais dès que je veux uploader deux fichiers à la suite, mon appli plante.
 
Je m'explique avec un peu de code :
voici la méthode quui pose problème.
uploadOk est une variable qui vaut tout le temps true tant qu'on ne quitte pas la fenetre principale.
Connexion Ftp ets un FTPClient qui est connecté. j'ai utilisé isConnscted pour m'en assurer tout au long du programme.
 
String p est le chemin du dossier à uploadé : C;//users par exemple
Code :

Code :
  1. public Void uploadDirectory(String p ,ConnexionFtp ftp)
  2.     {
  3.    
  4.    
  5.      File g = new File(p);
  6.    
  7.         try {   // pour récupérer les exceptions dues au FTPClient
  8.    
  9.        ftp.mkd(g.getName()); on crée le répertoire pour uploader les fichiers
  10.   ftp.cwd(g.getName());
  11.          File[] tab =g.listFiles(); on liste tous les fichiers du dossier
  12.          for(int i = 0;i<tab.length;i++)
  13.          {
  14.        
  15.          if(tab[i].isDirectory())        // si le fichier est dossier recurence  
  16.          {
  17.           if(uploadOk==true)
  18.                  uploadDirectory(tab[i].getAbsolutePath(),ftp);
  19.          }
  20.                 if(tab[i].isFile()) // si le fichier est un fichier, on l'upload
  21.                 {
  22.      
  23.              if(uploadOk==true)
  24.              {     
  25.           
  26.                File r=new File(tab[i].getAbsolutePath());     
  27.      
  28.                in = new FileInputStream(tab[i].getAbsolutePath());// On initialise les flux de données
  29.                       out = ftp.storeFileStream(tab[i].getName());
  30.        
  31.        //C'est ici que le programme s'arrete après la première boucle
  32.        System.out.println(ftp.getReplyString());
  33.       if(FTPReply.isPositiveCompletion(ftp.getReplyCode()))  // si la réponse de transfert de fichier est négative, on arrete tout
  34.         {   
  35.                          out.close();
  36.                                 in.close();
  37.                         out.flush();
  38.                                  System.out.println("erreur" );
  39.                 }
  40.          else
  41.         {
  42.                       
  43.         while(uploadOk) { // Tant que le nombre de bytes restant a transférer continue à etre positif
  44.              
  45.     
  46.              int bytes = in.read(buffer);
  47.            
  48.                 if (bytes < 0) // Si il n'y a plus de données dans le flux de donnée  on sort de la boucle
  49.                 break;
  50.                                out.write(buffer, 0, bytes);//upload par buffering
  51.                  
  52.                         }
  53.          in.close();
  54.          out.flush();
  55.                  out.close();
  56.          System.out.println(ftp.getReplyString());
  57.    } 
  58.           }
  59.           else
  60.           {
  61.                System.out.println("uploadok=false" );
  62.           }
  63.          System.out.println("1ère boucle passée" );
  64.           }//fin de la boucle isFiles
  65.          
  66.          }//fin de la boucle for
  67.    
  68.           ftp.cdup();
  69.          } catch (IOException e)
  70.                 {
  71.   // TODO Auto-generated catch block
  72.   e.printStackTrace();
  73.  }
  74. }


Mon premier fichier est uploadé mais dès le deuxième, cela ne marche plus.
Arret au niveau de ispositivecompletion.
 
Les FTP.getreply me donnent 226 transfer complete après le premier upload  
mais je ne vois pas le 150 open data connection pour le début du deuxième upload.
 
J'ai essayé de faire un while qui attende une réponse 150 du server mais le programme tourne en boucle.
 
J'espère avoir été claire et vous remercie d'avance pour votre aide


Message édité par anakin2hawk le 20-03-2009 à 10:29:24
Reply

Marsh Posté le 18-03-2009 à 22:37:13   

Reply

Sujets relatifs:

Leave a Replay

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