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