IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Envoi de fichier sur serveur FTP avec utilisation de la lib commons.net.ftp.*


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Envoi de fichier sur serveur FTP avec utilisation de la lib commons.net.ftp.*
    Bonjour,

    j'ai un problème que je n'arrive pas à comprendre et à résoudre.
    je souhaitre envoyer sur un serveur FTP un fichier upload à partir d'une page JSP et d'un formulaire dédié à l'envoie de fichier.

    Utilisation de la librairie : org.apache.commons.net.ftp.*

    Lors d'un envoie de fichier de type ASCII je n'ai aucun probleme.
    MAIS, lors d'un envoie de fichier de type BINAIRE, .jpg, .png, .exe... le fichier transmis sur le serveur est corrompu !

    j'ai spécifier un mode de tranfert BINARY pourtant et j'utilise pour le transfert

    public boolean storeFile(java.lang.String remote,
    java.io.InputStream local)
    throws java.io.IOException



    Qu'est ce qui est mal fait et qui abouti à mon probleme ?

    Voici la mehode d'envoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    public static String sendFileByFTP(FileItem urlLocal,String fileNameServeur,String directory)
        {
     
    	  FTPClient ftpClient = new FTPClient();
    	  boolean allIsOk = true;
    	  String newDest = "";
     
    	  try {
    	    int reply;
     
    	    ftpClient.connect(m_adresseIp);
    	    ftpClient.login(m_login,m_password);
    	    ftpClient.enterLocalPassiveMode();
    	    ftpClient.type(ftpClient.BINARY_FILE_TYPE);
     
    	    reply = ftpClient.getReplyCode();
     
    	    if(!FTPReply.isPositiveCompletion(reply)) {
    	    	ftpClient.disconnect();
    	      System.err.println("FTP server refused connection.");
    	      System.exit(1);
    	    }
     
    	    // TEST: Pb identique FileInputStream fis = new FileInputStream("C:/tmp/testok.png");
     
    	    InputStream is = urlLocal.getInputStream();
     
    		// Positionement sur le bon repertoire
    	    allIsOk = ftpClient.changeWorkingDirectory(directory);
     
    	    // Gestion du nom de fichier
    		String fileDest = "";
    	    String name = urlLocal.getName();
    	    if (fileNameServeur.equals("")){
    		    int position = name.lastIndexOf("\\",name.length());
    		    fileDest = name.substring(position+1,name.length());
    	    }else{
    	    	fileDest = fileNameServeur;
    	    }
    	    newDest = fileDest.replace("\\","/");	   
     
    		// Stockage du fichier sur FTP
    	    allIsOk = ftpClient.storeFile(newDest,fis);
     
    	    ftpClient.logout();
     
    	  } catch(IOException e) {
    	    e.printStackTrace();
    	    newDest = "ERROR";
    	  } finally {
    	    if(ftpClient.isConnected()) {
    	      try {
    	    	  ftpClient.disconnect();
    	      } catch(IOException ioe) {
    	        // do nothing
    	      }
    	    }	    
    	  }
     
    	  if (!allIsOk){
    		  return "ERROR"; 
    	  }
     
    	  return newDest;	  
     
        }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Essaie çà après l'envoi, avant le log-out

    client.completePendingCommand();


    Aussi, essaie ce type de transfert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Upload a file
                    InputStream fis = new FileInputStream("c:\\temp\\B.pdf");
                    OutputStream os = client.storeFileStream("B.pdf");
     
                    byte buf[] = new byte[8192];
                    int bytesRead = fis.read(buf);
                    while (bytesRead != -1) {
                        os.write(buf, 0, bytesRead);
                        bytesRead = fis.read(buf);
                    }
                    fis.close();
                    os.close();

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour ton soutien mais malheureusement je n'ai pas de meilleur resultat, j'ai écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    InputStream fis = new FileInputStream("c:\\tmp\\testok.png");
            OutputStream os = ftpClient.storeFileStream("_testok.png");
     
            byte buf[] = new byte[8192];
            int bytesRead = fis.read(buf);
            while (bytesRead != -1) {
                os.write(buf, 0, bytesRead);
                bytesRead = fis.read(buf);
            }
     
            fis.close();
            os.close();
     
            // Must call completePendingCommand() to finish command.
            if(!ftpClient.completePendingCommand()) {
            	ftpClient.logout();
            	ftpClient.disconnect();
                System.err.println("File transfer failed.");
                System.exit(1);
            }

    Le fichier est transféré mais corrompu !
    promis le fichier situé dans c:\\tmp\\testok.png est en bon état ...

    Why why why ??

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    il te dit quoi le serveur quand ton appli demande un transfert binary?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Voici la trace de mon serveur FTP, je ne vois pas de quoi ça peut provenir


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> Connected, sending welcome message...
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> 220-FileZilla Server version 0.9.24 beta
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> 220 Please visit http://sourceforge.net/projects/filezilla/
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> USER APPLICATIONUSER
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> 331 Password required for APPLICATIONUSER
    (000003) 10/03/2008 09:44:02 - (not logged in) (10.50.2.56)> PASS ********
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 230 Logged on
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> TYPE I
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 200 Type set to I
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> CWD /repo_fichier_geo/
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 250 CWD successful. "/repo_fichier_geo" is current directory.
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> PASV
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 227 Entering Passive Mode (10,50,2,56,4,204)
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> STOR testok.png
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 150 Connection accepted
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 226 Transfer OK
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> QUIT
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> 221 Goodbye
    (000003) 10/03/2008 09:44:02 - APPLICATIONUSER(10.50.2.56)> disconnected.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Simple curiosité, tu pourrais réexpliquer ta solution, parce que là il me semble que c'est là même méthode dans les deux cas

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    La chose qui change c'est que je spécifiait le type de fichier (BINARY) avec la methode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftpClient.type(ftpClient.BINARY_FILE_TYPE);
    CELA NE FONCTIONNERA PAS

    il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
    Erreur très bete, mais c'est souvent comme ça

    Voilà, merci pour le soutien en tout cas.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut Fichier divers
    Bonjour moi je recherche comment utiliser cette méthode mais avec un type de fichier lut directement exemple XML ou TXT mais avec ACSII et LOCAL_File_type ça ne marche pas. si quelqu'un a un solution ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. edtftpj et envoi de fichiers sur un serveur ftp
    Par SuperNours dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/11/2012, 23h48
  2. Envoi de fichier sur serveur FTP distant
    Par red_dog dans le forum VBScript
    Réponses: 13
    Dernier message: 15/04/2011, 10h31
  3. Pb avec la lib commons-net-ftp-2.0
    Par Diablo_22 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/12/2008, 17h51
  4. Envoi de fichier sur serveur
    Par hubald dans le forum Langage
    Réponses: 1
    Dernier message: 17/12/2008, 17h04
  5. Envoi de fichier sur un serveur FTP
    Par pepe2006 dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo