Problème lors de l'utilisation de la classe FTPSClient

Signaler
Messages postés
51
Date d'inscription
jeudi 29 mars 2007
Statut
Membre
Dernière intervention
7 février 2020
-
Bonjour à tous,

Alors voila je cherche a effectuer quelques manipulations sur un FTP SSL.
Mais je me retrouve face a un mur.

J'utilise la librairies commons-net-3.6.

J'essaie d'effectuer des action simple mais elle ne fonctionne pas toutes ...
Ce que j'essaie de faire :
1. Se connecter
2. Se deconnecter
3. Voir le repertoire courant
4. Changer le repertoire courant
5. Lister les fichiers / les dossiers
6. Télécharger un fichier depuis le FTP
7. Envoyer un fichier au FTP

Pour le moment j'arrive a faire les actions 1 a 4 mais pas 5 et 6 (7 j'ai pas encore essayé pour etre honnete)

Quand j'execute mon code :
1. Les commandes PWD, CWD, CREATE et QUIT, fonctionne tres bien et me retourne le resultat attendu
2. client.retrieveFile(remoteFile1, outputStream1) me renvoie faux
3. client.listFiles() et client.listDirectories() me renvoie des tableaux vide (avec 0 element)

Si jamais quelqu'un a une idee ou une ebauche d'idee, je suis preneur ...

Merci d'avance pour votre temps

Xavier

Ci-dessous le code que j'utilise
public class Ftp {

 FTPSClient client;
 public String host;
 public int port;
 public String username;
 public String password;

 public Ftp(final String host, final int port, final String userName, final String password){
  client = new FTPSClient();
  this.host = host;
  this.port = port;
  this.username = userName;
  this.password = password;
 }

 public boolean connectClient() throws IOException {
  boolean isLoggedIn = true;

  client.setEnabledProtocols(new String[] {"TLSv1.2"});

  FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
  client.configure(conf);

  client.connect(host, port);
  client.login(username, password);

  client.setFileType(FTP.BINARY_FILE_TYPE);
  client.enterLocalPassiveMode();

  int reply = client.getReplyCode();
  if (!FTPReply.isPositiveCompletion(reply)) {
   client.disconnect();
   System.out.println("Negative reply form FTP server, aborting, id was {} : " + reply);
   isLoggedIn = false;
  }

  return isLoggedIn;
 }

 public void TelechargerFile() {
  try {
   // Sur le FTP : /dossier1/dossier2/toto.xlsx EXISTE
   // EN LOCAL : /home/user/Documents/toto.xlsx EXISTE PAS. Enfin les dossiers oui mais pas le fichier.
   String remoteFile1 = "/dossier1/dossier2/toto.xlsx";
   File downloadFile1 = new File("/home/user/Documents/toto.xlsx");
   OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
   boolean success = client.retrieveFile(remoteFile1, outputStream1);
   outputStream1.close();

   if (success) {
    System.out.println("File #1 has been downloaded successfully.");
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 public boolean login(String username, String password) throws IOException {
  return client.login(username, password);
 }

 public boolean logout() throws IOException {
  return client.logout();
 }

 public boolean isConnected() {
  return client.isConnected();
 }

 public void disconnect() throws IOException {
  client.disconnect();
 }

 public boolean isAvailable() {
  return client.isAvailable();
 }

 public String getWorkingDirectory() throws IOException {
  return client.printWorkingDirectory();
 }

 public void changeWorkingDirectory(String pathname) throws IOException {
  client.changeWorkingDirectory(pathname);
 }

 public FTPFile[] listFiles() throws IOException {
  return client.listFiles();
 }

 public FTPFile[] listDirectories() throws IOException {
  return client.listDirectories();
 }

 public boolean createDirectories(final String directory) throws IOException {
  String[] iterable = directory.split("/");
  for (String dir : iterable) {
   boolean dirExists = client.changeWorkingDirectory(dir);
   if (!dirExists) {
    // try to create directory:
    client.makeDirectory(dir);
    dirExists = client.changeWorkingDirectory(dir);
   }
   if (!dirExists) {
    System.out.println("failed to change FTP directory (forms), not doing anything");
    return false;
   }
  }
  return true;
 }
}

public class test {
 public static void main(String[] args) {
  try {
   Scanner sc = new Scanner(System.in);

   System.out.println("Connexion au FTP");

   Ftp ftp = new Ftp("serveur", port, "user", "password");

   if (ftp.connectClient()) {
    System.out.println("-------------------------------------------------------");
    System.out.println("Vous êtes maintenant connecté au FTP");
    System.out.println("Vous avez le droit aux commandes PWD, CWD, CREATE, DLL, LIST et QUIT");
    System.out.println("-------------------------------------------------------\n\n");

    String reponse = "";
    boolean encore = true;
    while (encore) {
     reponse = sc.nextLine().toUpperCase();
     
     switch (reponse) {
     case "PWD":
      System.out.println(ftp.getWorkingDirectory());
      break;

     case "CWD":
      System.out.println(">> Saisissez le nom du répertoire où vous voulez aller : ");
      String dir = sc.nextLine();
      ftp.changeWorkingDirectory(dir);
      System.out.println(ftp.getWorkingDirectory());
      break;

     case "CREATE":
      System.out.println(">> Saisissez le nom du répertoire : ");
      String dire = sc.nextLine();
      ftp.createDirectories(dire);
      System.out.println(ftp.getWorkingDirectory());
      break;
      
     case "DLL":
      ftp.TelechargerFile();
      break;

     case "LIST":
      FTPFile[] list = ftp.listFiles();
      FTPFile[] list2 = ftp.listDirectories();

      for (FTPFile ff : list) {
       System.out.println(ff.getName());
       System.out.println(ff.toString());
      }
      for (FTPFile ff2 : list2) {
       System.out.println(ff.getName());
       System.out.println(ff.toString());
      }
      break;

     case "QUIT":
      ftp.disconnect();
      sc.close();
      encore = false;
      break;

     default :
      System.err.println("Commande inconnue !");
      break;
     }
    }
   }
  } catch (IOException e) {
   e.printStackTrace();
   System.exit(0);
  }

  System.out.println("Ciao ! ");
 }
}


--