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

Langage PHP Discussion :

Upload avec une barre de progression


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut Upload avec une barre de progression
    Bonjour,

    Je crée un formulaire d'upload de fichiers, en se basant sur une barre de progression, je me suis référencé sur cette doc, la page de réception des données (uploadCheck.php) me retourne une session vide:


    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
     
    <head>
        <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
        <script>
            $(document).ready(function() { 
                //$('.send').click(function(e) {
     
            $('input[type=file]').change(function(e) {
     
     
            var file = $('input[type=file]').get(0).files[0];
            console.log(file);
    /* Output
    File {name: "Foto.png", lastModified: 1472801997000, lastModifiedDate: Fri Sep 02 2016 08:39:57 GMT+0100 (WEST), webkitRelativePath: "", size: 153066…}
    */
            var formdata = new FormData();
            //console.log(formdata); // output: FormData {}
            formdata.append("file", file);
            formdata.append("size", file.size);
            console.log(formdata); // output: FormData {}
     
     
     
            var dloaded = e.loaded;
            console.log('loaded '+dloaded); // output: loaded undefined
     
            $.ajax({
                type: "POST",
                url: "uploadCheck.php",
                data: formdata,
                processData: false,
                dataType: "json",
     
            success: function(data) {
     
                         console.log('data '+data);
     
        } // end function
        //
            }); // end ajax
     
            //var dt = new FormData(this);
            //console.log(dt);
     
     
     
     
     
     
                return false; 
            });
     
    });
     
        </script>
     
    </head>
     
    <body>
     
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST"
    id="myForm" enctype="multipart/form-data">
    <input type="hidden" value="demo"
    name="<?php echo ini_get("session.upload_progress.name"); ?>">
    <input type="file" name="userfile"><br>
    <input type="submit" value="Start Upload">
    </form>
     
     
    </body>
    uploadCheck.php

    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
     
    <?php
    $key = ini_get('session.upload_progress.prefix').'demo';
     
     
     
    echo 'key '.$key.'<br>';
     
    print_r($_SESSION);
     
    if(!empty($_SESSION[$key]))
    {
        echo 'empty';
     
        $donnees = $_SESSION[$key];
     
        $depart= $donnees['start_time'];
        $maintenant=time();
        $delai_up= $maintenant-$depart;
     
        $bytes_processed = $donnees['bytes_processed'];
        $totale_taille = $donnees['content_length'];
     
        $avancee=$bytes_processed/$delai_up;
        $avancee= round($avancee/1024);
    }
    else
    {
        echo 'not';
     
        $avancee = 0;
    }
     
     
     
     
    echo 'total :'.$totale_taille.' | bytes: '.$bytes_processed.' / delai: '.$delai_up.' => debit: '.$avancee;
     
     
    ?>
    NB: La session est auto activée au serveur, pour les autres paramètres sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session.upload_progress.enabled = On
    session.upload_progress.cleanup = Off
    session.upload_progress.prefix = "upload_progress_"
    session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
    session.upload_progress.freq =  "1%"
    session.upload_progress.min_freq = "1"

    Merci a vous

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    bonjour,
    t'as pas oublié une session_start() tout au début de ta page html?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    bonjour,
    t'as pas oublié une session_start() tout au début de ta page html?
    Non, je l'ai pas mis

    NB: La session est auto activée au serveur,

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Il y a un bug sous chrome et safari (depuis 2009 et qui apparemment ne sera jamais corrigé) qui fait que cette technique ne peut être employée avec ces navigateurs.

    Tu peux utiliser ce module d'upload qui est compatible avec tous les navigateurs récents et qui propose cette fonctionnalité et bien plus. Les exemples fournis sont prêts à l'emploi.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut
    Merci ABCIWEB, j'ai aussi trouvé ce code sur le net

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Oui c'est ce principe qu'il faut utiliser et qui est d'ailleurs employé dans l'utilitaire d'upload dont je parle plus haut.

    Si c'est juste pour une progression graphique, ton code est très bien et suffisant, mais dans le cas d'upload on en souhaite souvent plus, c'est pour cela que j'ai proposé ce module qui est une collection de fonctionnalités (comme celle que tu as trouvée) qui ont été intégrées pour être utilisables par l'intermédiaire de simples options de configuration accessibles aux débutants sans besoin de coder du javascript. Je suis d'ailleurs entrain d'écrire un tuto de présentation qui sera visible dans un article sur ce forum prochainement, mais en attendant le module possède déjà un mode d'emploi complet et une quinzaine d'exemples directement fonctionnels si on utilise php côté serveur.

    Il donne entre autre le résultat réel du téléchargement, pas seulement l'indication que le fichier est envoyé mais que le serveur l'a correctement enregistré. De nombreuses autres informations peuvent être affichées en temps réel (vignette de prévisualisation, temps restant, taille etc.) avec également des exemples de recadrage des images avant upload ou affichage des informations Exif des APN. On peut aussi limiter facilement les extensions autorisée, la taille maximale autorisée... et des styles et fonctions événementiels permettent de personnaliser facilement l'affichage en fonction du retour des informations en temps réel.

    Il supporte l'upload multiple, multiple multiple (plusieurs champs de type file avec l'attribut multiple) et les gros fichiers disposent d'une sauvegarde automatique permettant une reprise d'upload en utilisant la partie sauvegardée après arrêt volontaire ou panne serveur ou internet. La technique utilisée permet également de surpasser les limitations serveurs concernant l'upload si bien qu'on peut télécharger des très gros fichiers sans limite de taille ni de nombre même sur des hébergements mutualisés premiers prix de type ovh etc.

    Bref si tu cherches quelque chose de complet et de polyvalent cela peut te faire gagner beaucoup de temps

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut
    J ai pu avancer dans le code, je ne metterais dès que possible

Discussions similaires

  1. Problèmes avec une barre de progression
    Par brbtx dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 19/12/2013, 16h48
  2. Remplissage auto d'une colonne avec une barre de progression
    Par Chikatilo dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 26/06/2008, 17h07
  3. Problème avec une Barre de Progression
    Par hugo69 dans le forum Access
    Réponses: 1
    Dernier message: 15/12/2006, 15h37
  4. Afficher une barre de progression en upload
    Par illuzmax dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 13h32

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