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

Programmation et administration système Perl Discussion :

[Net::FTP] progression téléchargement


Sujet :

Programmation et administration système Perl

  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut [Net::FTP] progression téléchargement
    Salut,
    Je souhaiterais savoir si des personnes parmis vous arrivent à télécharger via FTP en utilisant le module Net::FTP en voyant la progression du téléchargement.
    J'aimerais pouvoir avoir un affichage progressif du téléchargement mais je ne trouve pas de méthodes pour.
    Sinon avez vous un autre moyen de connaitre l'avancé d'un téléchargement via un même script?
    J'avais pensé à séparé dans le même script une partie qui telecharge et l'autre via un while qui lit la taille du fichier en cours de téléchargement, mais je n'arrive pas, surtout que les deux process ne tournent pas en même temps.

    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    bon en fait, c'est Ok.
    On peut contourner le probleme en utilisant les methodes retr, bytes_read du module Net::FTP et faire le telechargement soit même.
    Maintenant, j'ai un souci.
    si je telecharge un fichier plat, pas de souci.
    Si je telecharge un fichier compressé, mon fichier telechargé n'est pas toujours correct et peut même etre modifié.
    Comment bien le reecrire?
    voici comment je m'y prends :
    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
     
      ...
      $ftp->binary;
      my $taille_fichier = $ftp->size($fichier);
     
      my $dataconnection = $ftp->retr($fichier) or die $ftp->message;
      my $buffer;
      my $taille_lu = 0;
      open (my $fh, ">$fichier");
      while ($dataconnection->read($buffer,1024)) {
        $taille_lu = $dataconnection->bytes_read();
        #print "$taille_lu/$taille_fichier\r";
        print {$fh} "$buffer";
      }
      $dataconnection->close();
      close ($fh);
    etant donné que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier = "toto.tar.gz";
    Le fait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (my $fh, ">$fichier");
    => ça le corrompe?

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par djibril Voir le message
    Le fait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (my $fh, ">$fichier");
    => ça le corrompe?
    Là tu écris en mode texte, donc si c'est des données binaires, ça va le corrompre à coup sûr (sur certains OS en tout cas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my($fh), '>:raw', $fichier
      or die "Couldn't open $fichier :$!\n";
    --
    Jedaï

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    merci jedai,
    C'est vrai que je ne me suis jamais penché sur l'ecriture de fichier non textuel, car generalement, les modules font le boulot pour nous.
    http://perldoc.perl.org/PerlIO.html#Alternatives-to-raw
    donc j'ai choisis d'ecrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      open (my $fh, ">$fichier");
      binmode($fh);

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Sinon si je veux télécharger tout un repertoire, j'utilise le module Net::FTP::Recursive, mais j'ai pas trouvé de méthode retr afin de faire la même chose que ci dessus (cad, voir la progression de telechargement).
    T'as une idée jedai?

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par djibril Voir le message
    Sinon si je veux télécharger tout un repertoire, j'utilise le module Net::FTP::Recursive, mais j'ai pas trouvé de méthode retr afin de faire la même chose que ci dessus (cad, voir la progression de telechargement).
    T'as une idée jedai?
    Le faire à la main ? C'est pas si terrible, ou même tu peux t'appuyer sur le code de Net::FTP::Recursive si tu veux.

    --
    Jedaï

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Yop!
    Moi je diviserais le problème en deux étapes plutôt pas dure :
    1) tu parcours toute l'arborescence et tu construit une table de haschage du type {"$url" => "taille"}, et tu en profite pour calculer la taille totale
    2) tu utilise ta routine pour récup les fichiers listés

    après, ya plus qu'a faire une zoli barre de progression
    cqfd?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Progress Bar avec org.apache.commons.net.ftp
    Par HunTR dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 05/03/2010, 14h18
  2. est ce normal que le module NET::FTP soit TRES lent ?
    Par ramislebob dans le forum Modules
    Réponses: 4
    Dernier message: 14/03/2006, 09h13
  3. Modifier la classe sun.net.ftp.*;
    Par koolway dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 07/03/2006, 20h16
  4. [Javabean/sun.net.ftp] Downloader un fichier txt
    Par benben13 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 13/09/2005, 16h43
  5. NET::FTP unknown error sans raison
    Par niocco dans le forum Modules
    Réponses: 11
    Dernier message: 29/06/2005, 20h21

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