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

Vue hybride

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    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.

+ 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