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

Entrée/Sortie Java Discussion :

fichier complet FTP


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut fichier complet FTP
    Bonjour

    je développe une application dans laquelle je dois récupérer des fichiers transmis par FTP.
    or il arrive que parfois les fichiers ne soient pas fini de transférer, temps de transfert trop long, interruption de connexion et autres soucis, et donc certains sont incomplets, il s'agit d'images en jpeg.
    je n'ai pas trouvé le code permettant de savoir si le fichier est complètement arrivé.
    - j'ai bien pensé à utiliser la propriété length() mais pour la comparer à quoi ?

    - il y a la possibilité de regarder la taille en pixel de l'image mais java me renvoi la taille que l'image devrait avoir et non pas la taille de ce qui est arrivé.

    - peut être en regardant l'image pixels par pixel pour vérifier s'il n'y a pas de zone grises (c'est ce que Windows affiche pour une image incomplète), mais le temps de traitement commence à peser.

    - le serveur FTP est FileZilla, peut être qu'il y a une option pour mettre à disposition un fichier si celui ci est entièrement chargé, mais je n'ai pas trouvé

    est ce que quelqu'un a une solution à mon petit problème ?

    merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Comment récupères tu ces fichiers ?


    a++

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    776
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 776
    Par défaut
    Bonjour

    La commande ftp : SIZE mon_fichier renvoie la taille du fichier.


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Bonjour

    les fichiers sont transférés sur un ordinateur sous Windows sur lequel tourne FileZilla serveur, tout ça sur un réseau local et doivent être récupérés par mon programme. Je ne suis pas maitre des envois et je ne peux pas changer la méthode d'envoi.
    Je les récupère simplement par une copie faite avec un BufferedInputStream et un BufferedOutputStream


    @Jimmy
    comment récupérer la taille avec Java ?

    merci de votre aide

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    avec les Stream, pas possible. Il faut attaquer ton Api ftp en question pour lui demander la taille des fichiers sur le serveur.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    j'utilise les stream pour récupérer les fichiers à partir de mon application parce qu'ils sont en local

    voilà le déroulement des opérations
    - un utilisateur envoi un fichier par ftp sur un poste en windows équipé de filezilla
    - mon application sur le même serveur scrute le dossier d'arrivé et quand un fichier est là, je fait une pause de 5 secondes avant de le récupérer pour le traiter. ce temps d'attente est suffisant dans la majorité des cas, mais parfois le transfert ftp est interrompu et c'est là que je coince.
    s'il n'y a pas de solution je vais m'orienter vers le contrôle des pixels gris de l'image arrivée.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    le plus simple serait que l'application d'envoi, quand elle a fini d'envoyer le fichier, crée un petit fichier vide à coté qui t'informe que le travail est fini

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    effectivement, c'est ce que je fait pour d'autres partie de mon programme et ça marche super bien, mais là je ne peux pas, je ne maitrise pas la partie envoi

  9. #9
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 099
    Par défaut
    Bonsoir,

    Lorsque la machine Windows équipée de FileZilla server réceptionne un fichier, par exemple toto.jpg, est-ce que le fichier créé par FileZilla Server se nomme exactement pareil. Il me semble que FileZilla server nomme ses fichier avec une notion d'indentation, tant que ces derniers ne sont pas intégralement chargés, par exemlple, toto.jpg se nommerait toto_jpg.part ou toto_part1.jpg jusqu'à ce que le téléchargement de ce dernier soit terminé, et qu'il soit renommé avec son vrai nom, soit toto.jpg dans l'exemple ?
    Je en suis vraiment pas sûr, mais il me semble bien que les noms de fichiers donné par filezilla server soient différent du nom de fichier final. Dans ce cas, lorsque vous analysez le contenu de votre dossier de réception, il suffirait de ne pas tenir compte des noms de fichiers qui contiennent cette indentation...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    malheureusement non, Filezilla ne renomme pas temporairement le fichier.

    j'ai contourné le problème, je teste si la dernière ligne de pixel du fichier arrivé ne comporte pas que du gris, si c'est le cas j'attends...

    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
     
    			imageTemp = ImageIO.read(new File(fichier));
     
    			int compteur = 0;
     
    			for (int b = 0; b < imageTemp.getWidth(); b++) {
    				    Color couleur = new Color(imageTemp.getRGB(b, imageTemp.getHeight() - 1));
     
    				    if (couleur.toString().equals(Color.GRAY.toString())) {
    					    compteur++;
    				    }
    			}
     
    			if (compteur == imageTemp.getWidth() - 1) {
    				    System.out.println("pas glop, le fichier n'est pas là entièrement");
    			}
    merci de votre aide

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    776
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 776
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Jimmy
    comment récupérer la taille avec Java ?
    Je ne sais pas comment tu as ouvert ta connection, il te faut au minimum une java.net.Socket pour faire ça.
    tu envois simplement la commande SIZE nondefichier au serveur FTP il te retournera la taille.

    Sinon tu prends l'api jsch et puis voilà tu as quelques chose de plus haut niveau et de plus simple que du java.net.Socket.

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    jimmy, si vous aviez suivi le fil, ce n'est pas SON programme qui gère le protocole FTP. Lui il récupère le fichier sur le filesystem en backend après l'opération.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    exactement tchize, tu as bien cerné le circuit.

    l'option que j'ai voulu mettre en place, regarder la couleur de la dernière ligne de pixels ne fonctionne pas et ça met le brin dans mes traitements suivants.

    alors l'autre option que j'ai prise est de regarder fichier.lastModified() qui renvoi la date de dernière mise à jour. si le temps d'inactivité du fichier est supérieur à 30 secondes je lance mon traitement car je suppose que le fichier est complètement arrivé, en tests unitaires ça fonctionne.

    reste à faire des tests en situation...

  14. #14
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 112
    Par défaut
    Filezilla ne genererait pas un fichier log qui pourrait etre parcouru et analyser, pour recuperer "les ligne" de fichier transferés ainsi que le status du transfert (reussi ou aborted, upload/download ?)

    Moi j'ai dut faire ca avec proftpd et ca marche nickel... mtn je suppose que filezilla genere un beau fichier log. (comme le XFERLOG de proftp).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    voilà une idée qu'elle est bonne !!
    même pas j'y avait pensé
    c'est à ça qu'on reconnait les génies

    je vais tester ça de ce pas...

    merci très beaucoup wax

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    comme quoi ca tiens parfois à une connerie

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    ouaip, sauf que maintenant faut que je me fasse un parser pour décortiquer la log, en plus que plus le temps va durer plus ça va être long, j'estime à environ 500 à 1000 images qui seront transférées.

    et la lecture des fichiers textes c'est pas quelque chose que je maitrise

  18. #18
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 099
    Par défaut
    Une idée vient de me traverser l'esprit. Elle vaut ce qu'elle vaut, je ne l'ai pas testée, mais si vous faisiez un simple client FTP qui se connecte au serveur FileZilla, non pas pour uploader, mais downloader les fichiers listés dans le dossier. Encore mieux, demander au serveur la liste de ces fichiers, cela ne m'étonnerai pas que dans ces conditions, FileZilla server ne renvoit que la liste des fichiers entièrement téléchargés ?!!!
    Je vais faire un test avec mon serveur FileZilla et deux autres machines. Je vais uploader avec la machine A un fichier très gros (plusieurs giga pour que ça prenne du temp), et sur la machine B, je verrai bien si une fois connecté en client il m'affiche le fichier en cours de téléchargement. Si c'est le cas, je lancerai le téléchargement depuis B avant que A ait fini d'uploader, je verrai bien comment ça se passe....

    A+
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Par défaut
    j'ai eu à faire un programme similaire,

    si tu n'as pas de probleme de debit et d'occupation reseau la manière la + simple (j'ai cru comprendre que tu étais pris par le temps)
    est de faire une methode qui recupere le fichier. une fois récupéré tu compare le flux de ton fichier copié au flux (a l'instant t) du fichier serveur (tu fait une methode, monfihcier.compareTo(fichier source).
    si les flux sont différent tu supprime (ou si tu veux faire + propre tu fait cette verif avant la creation du fichier en local) et tu passe à un autre fichier (tu reviendra sur celui la plus tard).

    c'est pas forcement le + propre mais si t'as aucun moyen de verifier que le fichier est terminé...

  20. #20
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 112
    Par défaut
    Citation Envoyé par dugenoux Voir le message
    ouaip, sauf que maintenant faut que je me fasse un parser pour décortiquer la log, en plus que plus le temps va durer plus ça va être long, j'estime à environ 500 à 1000 images qui seront transférées.

    et la lecture des fichiers textes c'est pas quelque chose que je maitrise
    Bah faire un parseur n'est franchement pas ce qu'il y'a de plus dure la dedans je pense

    En plus pour "le temps que ca va durer", je n'ai pas tout suivi, mais tu px le faire en "temps réel", j'entends, lire la nouvelle ligne qui viendrait d'etre ajouté au fichier (comme si tu faisais un tail sous linux) uniquement, traiter la chaine et faire ce que tu veux apres avec les infos. Donc un truc qui tourne en continu, ou alors le mode batch qui lis tout le fichier a une heure prevue, puis qui efface le fichier ou quoi, mais c'est moins bien a mon gout.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. []transfert de fichiers via FTP
    Par ista9im dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/10/2005, 23h02
  2. [C#] [FTP] Envoi et suppression fichier sur ftp NON ANONYME!
    Par djsbens dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/03/2005, 10h20
  3. Fichier bat + FTP + passage parametres
    Par Leti dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 13/12/2004, 18h21
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. Réponses: 1
    Dernier message: 19/08/2003, 16h11

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