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

Web Perl Discussion :

Upload, et Progress Bar


Sujet :

Web Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Upload, et Progress Bar
    Bonjour,

    Je pense que je ne suis pas le premier à venir vers vous chercher de l'aide, mais je n'ai pourtant rien trouvé au cours de mes recherches.

    Tout d'abord je ne connais pas vraiment Perl, mais j'ai d'assez bonne notion en PHP qui font que je comprends bien la syntaxe de Perl et la programmation en général.

    J'ai récupérer un script d'upload en Perl j'ai réussi à le faire fonctionner, j'aurais voulu savoir comment connaitre le poids qui a été uploadé, et le poids qu'il reste à uploader afin de créer une progress Bar.

    Voici mon script:

    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
     
    #!c:\Perl\bin\perl.exe
     
    use strict;  
    use CGI;  
    use CGI::Carp qw ( fatalsToBrowser );  
    use File::Basename;  
     
    $CGI::POST_MAX = 1024 * 50000;  
    my $safe_filename_characters = "a-zA-Z0-9_.-";  
    my $upload_dir = "C:/Program Files/wamp/www/site/uploaded";  
     
    my $query = new CGI;  
    my $filename = $query->param("photo");  
     
    if ( !$filename )  
    {  
     print $query->header ( );  
     print "There was a problem uploading your photo (try a smaller file).";  
     exit;  
    }  
     
    my ( $name, $path, $extension ) = fileparse ( $filename, '\..*' );  
    $filename = $name . $extension;  
    $filename =~ tr/ /_/;  
    $filename =~ s/[^$safe_filename_characters]//g;  
     
    if ( $filename =~ /^([$safe_filename_characters]+)$/ )  
    {  
     $filename = $1;  
    }  
    else  
    {  
     die "Filename contains invalid characters";  
    }  
    my $upload_filehandle = $query->upload("photo");  
     
    open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";  
    binmode UPLOADFILE;  
     
    while ( <$upload_filehandle> )  
    {  
     print UPLOADFILE;  
    }  
     
    close UPLOADFILE;  
     
    print $query->header ( );  
    print '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
     <head>  
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
       <title>Thanks!</title>  
       <style type="text/css">  
         img {border: none;}  
       </style>  
     </head>  
     <body>  
       <p>Thanks for uploading your photo!</p>  
       <p>Your photo:</p>  
       <p><img src="../site/uploaded/'.$filename.'" alt="Photo" /></p>  
     </body>  
    </html> '

    Merci d'avance pour votre aide !

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    up ?

  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
    CGI te donne accès à ce genre de chose en sous-main, par exemple parmi les paramètres que tu peux passer à new(). Tu as des modules sur le CPAN qui te permettent de faire des progress bar, et par exemple CGI::ProgressBar contient un modèle qui exploite ceci pour représenter le progrès de l'upload.

    --
    Jedaï

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci,

    J'ai passé pas mal de temps à essayer d'installer ce module, pour finalement me dire que de toute façon ça ne marcherait pas sur mon hébergement qui est mutualisé, et qui ne me donne pas accès au dossier/perl/.


    Ou alors j peux peut être utiliser ce module sans accéder à ce dossier ?


    Aurais-tu une autre solution ? :]


    en te remerciant !

  5. #5
    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 Balboulloude Voir le message
    Ou alors j peux peut être utiliser ce module sans accéder à ce dossier ?
    Tout à fait, tu peux installer localement sous ton répertoire cgi-bin (ou autre répertoire plus sûr). L'idéal étant de disposer d'un accès ssh à ton abonnement pour pouvoir utiliser le CPAN pour installer les modules (attention il te faudra le configurer pour faire des installations locales, par défaut il est configuré pour installer globalement et tu n'as pas les droits). Mais dans le cas de CGI::ProgressBar, tu peux même te contenter de faire un copier-coller de ProgressBar.pm dans le répertoire approprié.

    (Dans ton script mets "use lib 'racineDeTesModulesLocaux';" avant de charger les modules que tu as installé localement)

    --
    Jedaï

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    Citation Envoyé par Jedai Voir le message
    Mais dans le cas de CGI:rogressBar, tu peux même te contenter de faire un copier-coller de ProgressBar.pm dans le répertoire approprié.

    (Dans ton script mets "use lib 'racineDeTesModulesLocaux';" avant de charger les modules que tu as installé localement)

    J'aimerai utiliser cette méthode, mon FTP se constitue ainsi :
    www/
    cgi-bin/

    dois-je mettre ProgressBar.pm dans le dossier cgi-bin? ainsi que les fichiers test.pl et Makefile.pl ?
    Que faire du fichier du fichier META.yml ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use lib 'racineDeTesModulesLocaux';
    'racineDeTesModulesLocaux'; = cgi-bin ?

    Je suis désolé de poser autant de questions, mais c'est la première fois que je quitte le dossier /www/ alors je suis perdu, pour l'instant


    Merci

  7. #7
    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
    Mets ProgressBar.pm dans cgi-bin/lib/CGI/ et ajoute "use lib 'lib';" dans ton script dans cgi-bin/. Ca devrait suffire : les autres fichiers de l'archive sont destiné à installer le module automatiquement ou indiquent au shell CPAN quelles sont les dépendances du module (juste CGI, que tu as déjà).

    --
    Jedaï

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Salut, je me suis arraché des cheveux mais j'ai réussi à faire "marcher" ce script sur mon hébergement, (marcher = pas d'erreur 500)

    la ligne "use strict;" provoquait cette erreur.

    Cependant le script que j'utilise ne marche pas encore, lorsque j'envoie une image la page change, mais l'upload ne semble pas se faire, la progressbar n'évolue pas non plus, et donne une page fixe comme celle ci :


    d'ailleurs je ne sais pas dans quel dossier les images sont censées être uploadées ?

    Voici mon code à l'heure qu'il est, en espérant que l'erreur soit flagrante !

    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
    #!/usr/bin/perl
    use warnings;
    use lib 'lib';
    use CGI::ProgressBar qw/:standard/;
    $| = 1; # Do not buffer output
     
    my $data;
    my $hook_called;
    my $cgi = CGI->new(\&bar_hook, $data);
     
    if (not $hook_called){
            print $cgi->header,
            $cgi->start_html( -title=>'A Simple Example', ),
            $cgi->h1('Simple Upload-hook Example');
    }
     
    print $cgi->start_form( -enctype=>'application/x-www-form-urlencoded'),
            $cgi->filefield( 'uploaded_file'),
            $cgi->submit,
            $cgi->end_form,p;
     
    if ($cgi->param('uploaded_file')){
            print 'uploaded_file: '.param('uploaded_file');
    }
     
    sub bar_hook {
            my ($filename, $buffer, $bytes, $data) = @_;
            if (not $hook_called){
                    print header,
                    start_html( -title=>'Simple Upload-hook Example', ),
                    h1('Uploading'),
                    p(
                            "Have to read <var>$ENV{CONTENT_LENGTH}</var> in blocks of <var>$bytes</var>, total blocks should be ",
                            ($ENV{CONTENT_LENGTH}/$bytes)
                    ),
                    progress_bar( -from=>1, -to=>($ENV{CONTENT_LENGTH}/$bytes), -debug=>1 );
                    $hook_called = 1;
            } else {
                    # Called every $bytes, I would have thought.
                    # But calls seem to go on much longer than $ENV{CONTENT_LENGTH} led me to believe they ought:
                    print update_progress_bar;
                    print "$ENV{CONTENT_LENGTH} ... $total_bytes ... $hook_called ... div="
                    .($hook_called/$total_bytes)
                    ."<br>"
            }
            sleep 1;
            $hook_called += $total_bytes;
    }
     
    print $cgi->hide_progress_bar;
    if ($hook_called){
            print p('All done after '.$hook_called.' calls');
    }
    print $cgi->end_html;
    exit;
    edit :
    PS : c'est le code donné en exemple dans le module que Jedaï m'a suggéré.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    up

Discussions similaires

  1. Progress bar pourcentage uploadé
    Par leyeno dans le forum Flex
    Réponses: 1
    Dernier message: 17/09/2010, 10h28
  2. Réponses: 2
    Dernier message: 01/02/2010, 15h45
  3. Progress bar & upload multiple $_FILES
    Par fabien14 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 04/12/2006, 18h34
  4. Progress bar / upload de fichier
    Par mchicoix dans le forum XMLRAD
    Réponses: 6
    Dernier message: 21/07/2005, 19h52

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