Un download de quoi?
Du fichier qui se trouvera sur le répertoire distant vers mon ordinateur personnel.Envoyé par valered
comme le style des download régulier qu'on fait à partir de l'internet
exemple : downloader le JDK de sun vers notre machine
Mais un exemple qui fonctionnera avec VWP aussi.
ValèreEnvoyé par valered
comment je peux vérifier si je suis bel et bien connecté ?
comment je peux vérifier si je peux changer de répertoire ?
Moi de mon côté, je n'ai pas pu encore déceller pourquoi la liste des ne s'affiche pas. Est-ce qu'on pourra avoir un peu d'aide ailleurs ?
est-ce que ce n'est pas juste VWP qui cause le problème ? peut-être avec un projet web sans le VWP ça marchera.
Y a t-il un autre forum autre que VWP, plus spécialisé dans ces choses ?
S'il te plait donnes moi des nouvelles la dessus
Merci.
Je l'avais vérifié avec le débugger. En mettant un point d'arrêt au début de getFtp(), j'avais constaté qu'on se logguait bien, on récupérait le chemin du répertoire distant, on pouvait bien changer de répertoire, mais pas récupérer la liste des fichiers.Envoyé par diamonds
C'est ta classe FTP qui ne marche pas (bis), ce n'est pas le VWP. Je t'ai suggéré d'utiliser une des (nombreuses) autres bibliothèques FTP, celle de jakarta commons par exemple.Envoyé par diamonds
Si tu veux un forum plus spécialisé pour ce problème précis, c'est celui pour les APIs qu'il te faut, et même le sous forum IO, mais je constate que tu as déjà trouvé le chemin.
Valère
Lorsque tu parles de la classe FTp, est-ce que tu peux être plus précis ? si tu me montrerais juste une seule bibliothèque FTP et je l'utiliserais.C'est ta classe FTP qui ne marche pas (bis), ce n'est pas le VWP. Je t'ai suggéré d'utiliser une des (nombreuses) autres bibliothèques FTP, celle de jakarta commons par exemple.
Je deviens bonne alors !!Envoyé par valered
En fait ce que je veux c'est downloader un fichier du répertoire distant.
Même si l'affichage ne s'effectue pas, ce n'est pas grave.
Salut valère
Il y a quelqu´un qui ne peut pas se connecter avec son micro à l'internet (pour des raisons qui ne me regaredent pas), mais il veut que je lui envoi la trace de l'erreur.
Comment puis-je lui envoyer ceci ?
Merci
Dans la classe FTP il y a une méthode download qui n'a pas été utilisée nullepart dans le programme. Est-ce que ça peut aider à quelques choses ?
ftp.downloadFile(...,...)
Diamonds,
Voici un petit projet J2SE standard qui se connecte à distance, change de répertoire, liste les fichiers, et télécharge le premier fichier de la liste.
Attention, le projet références 2 librairies, ApacheCommonsNet et ApacheJakartaOro. Ces libraries (créées avec Tools | Library Manager) encapsulent les jars nécessaires au projet: Apache Jakarta Commons Net (download) et Apache Jakarta ORO (Download) .
Il ne reste plus avant d'exécuter le projet qu'à modifier les paramètres de connection, que j'ai codé en dur. Une fois que ce petit projet marchera, tu pourra t'en servir pour modifier le projet VWP que j'ai posté plus haut.
Voici la méthode principale de la classe.
Valère
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 private void Go() { // Creation client et connection FTPClient client = new FTPClient(); try { client.connect(hostname); if (client.isConnected()) { System.out.println("Connection à " + hostname + " OK"); } else { System.out.println("Erreur de connection à " + hostname); } // login au serveur client if (client.login(login, password)) { // changement de répertoire if (client.changeWorkingDirectory(path)) { FTPFile[] ftpFiles = client.listFiles(); System.out.println("Affichage de liste des fichiers du répertoire"); for (int i = 0; i < ftpFiles.length; i++) { FTPFile ftpFile = ftpFiles[i]; System.out.println("Fichier " + i + ": " + ftpFile.getName()); } System.out.println("Fin de la récupération de la liste des fichiers."); // transfert du premier fichier dans c:\temp if (ftpFiles.length > 0) { FTPFile ftpFile = ftpFiles[0]; client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); File file = new File( localDirectory + File.separator + ftpFile.getName() ); FileOutputStream fos = new FileOutputStream( file ); if (client.retrieveFile( ftpFile.getName(), fos )) { System.out.println("Transfert du fichier " + ftpFile.getName() + " OK"); } else { System.out.println("Erreur de transfert du fichier " + ftpFile.getName()); } fos.close(); } else { System.out.println("pas de fichier à transférer"); } } else { System.out.println("Erreur lors du changement de répertoire"); } client.logout(); } else { System.out.println("Erreur de connection, verifiez login et password"); } client.disconnect(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
Wow ! c'est formidable ! je commence à voir le bout du tunnel. Merci beaucoup Valère pour ton aide.
J'ai rajouté les deux bibliothèques dans le projet et voici ce qui se passe.
La liste des fichiers s'affiche effectivement sur la sortie standard, toutefois 2 petites choses : le fichier n'est pas downlodé sur le répertoire et une erreur apparait comme quoi je n'ai pas de permissions sur le repertoire temp que voici :
Pour ne pas afficher le "." et le ".." je vais mettre le compteur "i" à 2 au lieu de 0
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 init: deps-jar: Compiling 1 source file to E:\Netbeans_VWP\val_diamonds\build\classes compile: run: Connection à Natahlie OK Affichage de liste des fichiers du répertoire Fichier 0: . Fichier 1: .. Fichier 2: fichier_1 Fichier 3: fichier_2 Fichier 4: fichier_3 Fin de la récupération de la liste des fichiers. java.io.FileNotFoundException: c:\temp\. (Access is denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:131) at val_diamonds.MyFtpClient.Go(MyFtpClient.java:75) at val_diamonds.MyFtpClient.main(MyFtpClient.java:41) BUILD SUCCESSFUL (total time: 1 second)
en attendant tes commentaires, je vais aller reporter l'ensemble sur VWP.
Visiblement, et tout simplement, le répertoire c:\temp n'existe pas sur ton PC. Créée le, ou bien change le chemin dans la classe.
Valère
Oui, il existe bien. ok j'ai crée un autre répertoire nomé : temp_test_ftp et j'ai décoché l'attribue "read only" sur ses propriétes. et voici ce que ça donne.Envoyé par valered
voici aussi le chemin dans la classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part private String localDirectory = "c:\\temp_test_ftp";remarque : lorsque je retourne sur les propriétés du répertoire temp_test_ftp pour vérifier les droits d'accès, je vois que l'attribut "read only" est devenu de nouveau coché.
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 init: deps-jar: Compiling 1 source file to E:\Netbeans_VWP\val_diamonds\build\classes compile: run: Connection à Nathalie OK Affichage de liste des fichiers du répertoire Fichier 0: . Fichier 1: .. Fichier 2: fichier_1 Fichier 3: fichier_2 Fichier 4: fichier_3 Fin de la récupération de la liste des fichiers. java.io.FileNotFoundException: c:\temp_test_ftp\. (Access is denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:131) at val_diamonds.MyFtpClient.Go(MyFtpClient.java:76) at val_diamonds.MyFtpClient.main(MyFtpClient.java:42) BUILD SUCCESSFUL (total time: 2 seconds)
Si je change l'indice de 0 à 2 comme suit
le résultat deviendra comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (ftpFiles.length > 0) { FTPFile ftpFile = ftpFiles[2];
Il semble que lorsqu'on essaye de dowlowder le premier élément du répertoire qui était le "." (répertoire actuel), le message d'erreur nous indique un manque de permission (access is denied), mais lorsque j'essaye de downloder le troisième élément du répertoire qui est dans ce cas "fichier_1", le message d'erreur nous indique la ligne en rouge ci-dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 init: deps-jar: Compiling 1 source file to C:\Documents and Settings\Desktop\val_diamonds\val_diamonds\build\classes compile: run: Connection à Natahlie OK Affichage de liste des fichiers du répertoire Fichier 2: fichier_1 Fichier 3: fichier_2 Fichier 4: fichier_3 Fin de la récupération de la liste des fichiers. Erreur de transfert du fichier fichier_1 BUILD SUCCESSFUL (total time: 0 seconds)
Donc, selon qu'on veut downloader le premier élément ou le troisième élément, le message d'erreur est différent.
il semble que ça pêche dans ce coin :
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 if (ftpFiles.length > 0) { FTPFile ftpFile = ftpFiles[2]; client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); File file = new File( localDirectory + File.separator + ftpFile.getName() ); FileOutputStream fos = new FileOutputStream( file ); if (client.retrieveFile( ftpFile.getName(), fos )) { System.out.println("Transfert du fichier " + ftpFile.getName() + " OK"); } else { System.out.println("Erreur de transfert du fichier " + ftpFile.getName()); } fos.close(); } else { System.out.println("pas de fichier à transférer"); }
Valère
Est-ce que tu as tester le même programme sur ta machine ? si oui, fonctionne t-il ?
Est-ce
Diamonds
oui, le prg marchait mais le serveur ftp que j'ai utilisé ne renvoyait pas . et .. dans la liste des répertoires, c'était ça ton erreur, on ne peut pas télécharger des répertoires par FTP de cette manière.Envoyé par diamonds
Pour ton erreur actuelle, vérifie si en bidoouillant le code tu n'as pas modifié le chemin dans lequel le prg doit transférer ton fichier sur ta machine.
en dessous derajoutes
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.out.println("Erreur de transfert du fichier " + ftpFile.getName());, et à l'éxécution regarde si le chemin est correct, si tu as les droits etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.out.println("Le fichier " + file.getAbsolutePath() + " n'a pu être créé");
Maintenant le download s'effectue mais pas le contenu du fichier, la taille du fichier qui a été downloader est de zéro.
Aussi, même si la copie du fichier semble passer, c'est le "else" qui s'exécute
sur le répertoire d'acceuil C:\temp_test_ftp le fichier fichier_1 est bel et bien présent, mais il est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 else { System.out.println("Erreur de transfert du fichier " + ftpFile.getName()); System.out.println("Le fichier " + file.getAbsolutePath() + " n'a pu être créé"); }
Voici la sortie
Est-ce que la ligne suivante est correcte pour toute sorte de fichiers(différentes extension) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 run: Connection à Nathalie OK Affichage de liste des fichiers du répertoire Fichier 0: . Fichier 1: .. Fichier 2: fichier_1 Fichier 3: fichier_2 Fichier 4: fichier_3 Fin de la récupération de la liste des fichiers. Erreur de transfert du fichier fichier_1 Le fichier C:\temp_test_ftp\fichier_1 n'a pu être créé BUILD SUCCESSFUL (total time: 0 seconds)
Est-ce que les deux lignes suivantes ne sont pas suspectes ? parce que le if donne un résultat faux et c'est le else qui s'exécute
Code : Sélectionner tout - Visualiser dans une fenêtre à part client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
Pour éviter le . et le .. et downloder fichier_1 j'ai mis le compteur à 2 comme suit qui
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FileOutputStream fos = new FileOutputStream( file ); if (client.retrieveFile( ftpFile.getName(), fos ))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (ftpFiles.length > 0) { FTPFile ftpFile = ftpFiles[2];
Valère
Il semble qu'il manque quelques choses comme fos.write(.......)
Qu'est ce que t'en penses ?
Diamonds
Je viens de reessayer le projet, j'ai téléchargé un fichier de 97 Mo sans problème... Je ne vois pas ce qui bloque chez toi.
Fichier_1 n'est pas un répertoire? Ce n'est pas non plus un fichier vide?
Valère
Fichier_1 a une taille de 3310 bytes. Il est sur un serveur Unix. C'est un fichier avec une extension xml.Envoyé par valered
Fichier_1 n´est pas un répertoire non plus.
Moi je fais les tests de mon ordinateur (windows) vers un serveur unix.
Généralement j'utilise le logiciel EXCEED pour accéder au serveur unix (pas de Internet), alors je ne sais pas si il y a une différence.
Est-ce que tu connais un site Internet duquel je pourrais faire l'essai (chemin, userid,mot de passe) ? si ce test fonctionne, ceci veut dire que le problème se pose à l'interne (mon ordi et le serveur unix)
C'est là le problème, normalement le programme devrait afficher le nom réél du fichier, pas Fichier_1 ...
Si j'exécute le prg, j'obtiens
Si le prg cherche à récupérer un fichier qui s'appelle File_1 et que ce fichier n'existe pas, tu as cette erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 init: deps-jar: compile-single: run-single: Connection à XXXX OK Affichage de liste des fichiers du répertoire Fichier 0: send_other_EWS_result_files.log Fichier 1: send_other_EWS_result_files.log.gz Fichier 2: send_stdf_EWS_result_files.log Fichier 3: send_stdf_EWS_result_files.log.gz Fin de la récupération de la liste des fichiers. Transfert du fichier send_other_EWS_result_files.log OK BUILD SUCCESSFUL (total time: 1 minute 41 seconds)
Maintenant pourquoi n'as-tu pas le nom correct du fichier? Peux tu essayer en mettant en dur le nom correct du fichier à télécharger?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager