ftp probleme upload consécutifs - Java - Programmation
MarshPosté 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 :
public Void uploadDirectory(String p ,ConnexionFtp ftp)
{
File g = new File(p);
try { // pour récupérer les exceptions dues au FTPClient
ftp.mkd(g.getName()); on crée le répertoire pour uploader les fichiers
ftp.cwd(g.getName());
File[] tab =g.listFiles(); on liste tous les fichiers du dossier
for(int i = 0;i<tab.length;i++)
{
if(tab[i].isDirectory()) // si le fichier est dossier recurence
{
if(uploadOk==true)
uploadDirectory(tab[i].getAbsolutePath(),ftp);
}
if(tab[i].isFile()) // si le fichier est un fichier, on l'upload
{
if(uploadOk==true)
{
File r=new File(tab[i].getAbsolutePath());
in = new FileInputStream(tab[i].getAbsolutePath());// On initialise les flux de données
out = ftp.storeFileStream(tab[i].getName());
//C'est ici que le programme s'arrete après la première boucle
System.out.println(ftp.getReplyString());
if(FTPReply.isPositiveCompletion(ftp.getReplyCode())) // si la réponse de transfert de fichier est négative, on arrete tout
{
out.close();
in.close();
out.flush();
System.out.println("erreur" );
}
else
{
while(uploadOk) { // Tant que le nombre de bytes restant a transférer continue à etre positif
int bytes = in.read(buffer);
if (bytes < 0) // Si il n'y a plus de données dans le flux de donnée on sort de la boucle
break;
out.write(buffer, 0, bytes);//upload par buffering
}
in.close();
out.flush();
out.close();
System.out.println(ftp.getReplyString());
}
}
else
{
System.out.println("uploadok=false" );
}
System.out.println("1ère boucle passée" );
}//fin de la boucle isFiles
}//fin de la boucle for
ftp.cdup();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
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
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 :
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