Bonjour,
le problème est le suivant:
je transfère et télécharge les fichiers de données de l'application que j'ai développée vers un serveur.
Quand on transfère le fichier vers le serveur:
- Avec JAVA7 et Win7 -> pas de problème
- sur un autre PC Win XP, JAVA7 -> Le fichier est corrompu. Apparemment, il manque un petit morceau du fichier stocké sur le serveur.
La bibliothèque utilisée est org.apache.commons.net.ftp
2 questions:
- avez-vous eu une expérience similaire, et si oui, qu'elle fut la solution ?
- Avez-vous des astuce pour pister une corruption de fichier ?
voici un extrait du code exécutant le transfert vers le serveur:Merci par avance...
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 private class CTeleTransmetFichier extends SwingWorker<Boolean, Integer> { FTPClient clientFtp = null; @Override protected Boolean doInBackground() throws Exception { File fichierLocal; OutputStream fluxSortie = null; FileInputStream fichierLecture = null; byte [] tampon; long total_octets_a_lire, total_octets_lus; int octets_lus; resultatTransfert = false; sFichierImport = null; // Est-ce que le fichier local existe ? total_octets_a_lire = 0; fichierLocal = new File( sLocalDossier + File.separator + sLocalFichier ); if( fichierLocal.exists()) total_octets_a_lire = fichierLocal.length(); if( total_octets_a_lire == 0 ) { traiteErreurFtp( "FICHIER INEXISTANT OU LONGUEUR INDEFINIE", this.toString() + ": Fichier local inexistant ou sa longueur indéfinie " + sLocalDossier + File.separator + sLocalFichier ); return false; } // Préparation de la connexion: clientFtp = new FTPClient(); if( !preliminairesConnexionFTP( clientFtp )) { deconnexionFTP( clientFtp ); return false; } // Préparation de la gestion des flux: try { fichierLecture = new FileInputStream( fichierLocal ); fluxSortie = clientFtp.storeFileStream( sFtpFichier ); if( !FTPReply.isPositivePreliminary( clientFtp.getReplyCode())) { traiteErreurFtp( "ECHEC de DIALOGUE avec le SERVEUR", this.toString() + ": " + clientFtp.getReplyString()); } else { tampon = new byte[ 4096 ]; octets_lus = -1; total_octets_lus = 0; // Transfert de fichier while(( octets_lus = fichierLecture.read( tampon )) != -1 ) { fluxSortie.write( tampon, 0, octets_lus ); total_octets_lus += octets_lus; publish( new Integer( ( int )( 100 * total_octets_lus / total_octets_a_lire ))); if( isCancelled()) // L'utilisateur a appuyé sur le bouton STOP { C_Projet.logMessage.log( Level.INFO, "L'utilisateur a interrompu le flux de données pour " + sLocalFichier ); break; } } // Arrivé ici signifie qu'il n'y a pas eu d'exception. resultatTransfert = true; } } catch( Exception e ) { traiteErreurFtp( "ERREUR lors du TRANSFERT vers SERVEUR", e.getMessage()); } // Fermeture des flux avant interruption connexion: try { if( fichierLecture != null ) { fichierLecture.close(); } } catch( IOException ioE ) { C_Projet.logMessage.log( Level.WARNING, "Erreur de la fermeture du flux de lecture " + ioE.getMessage()); } try { if( fluxSortie != null ) { fluxSortie.close(); } } catch( IOException ioE ) { C_Projet.logMessage.log( Level.WARNING, "Erreur de la fermeture du flux de sortie " + ioE.getMessage()); } // Fermeture connexion: deconnexionFTP( clientFtp ); return resultatTransfert; } }
Partager