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;	  
 
    }