Re: Progressbar lors d'un upload

Top Page

Reply to this message
Author: Stephane Bonhomme
Date:  
To: guilde
Subject: Re: Progressbar lors d'un upload
Le vendredi 29 août 2008 à 13:57 +0100, Frédéric a écrit :
> Le 29/8/2008, "Stephane Bonhomme" <stephane@???> a écrit:
>
> >Il faut comprendre deux choses : le navigateur garde la connexion tcp
> >ouverte tant que le serveur ne la ferme pas, mais il est quand meme
> >capable d'interpreter les données au fur et à mesure qu'elles arrivent,
> >en particulier le script javascript contenu dans les balises <SCRIPT>
> >sont interprétées à la volée.
> >
> >Le script perl affiche d'abord le template de la page, et envoie le code
> >de la fonction javascript (SP) qui va mettre à jour le html affiché, et
> >ensuite boucle jusqu'a ce que la taille du fichier sur le disque soit
> >égale à la taille annoncée dans le header du post http (ou que la taille
> >ne bouge plus en cas d'erreur / interruption).
> >
> >A chaque itération cgi génere une balise script qui fait un appel a SP
> >avec la valeur courante (taille chargée %...)
>
> Ok, pigé !
>
> >Voila le fonctionnement dans les grandes lignes, c'est assez sioux, mais
> >attention, ça risque de ne pas fonctionner avec un navigateur qui
> >n'interprete les scripts à la volée (mais tous les navigateurs
> >'modernes' savent faire), plus problématique ça ne doit pas bien passer
> >les proxies.... enfin....
> >
> >Si cela est convertible en mod_python ou php ? Je ne vois pas de
> >problème tant qu'il n'y a pas de buffering fait au niveau du serveur et
> >que la sortie du script est envoyée en temps réel sur la socket tcp.
>
> Le problème, me semble-t-il, c'est justement de pouvoir boucler
> *pendant* l'upload. Or, j'ai l'impression que l'appel à un script
> PHP ou PSP n'est fait qu'une fois que le transfert a eu lieu. Ça
> vient, si j'ai bien compris, du publisher par défaut ; il faut en
> implémenter un qui puisse être exécuter pendant le transfert...


En fait il y a deux choses indépendantes qui se font en // :

- La soumission du formulaire, par une requête POST contenant les
données du fichier, cette reuqête est interprétée par le script qui
affichera le resultat final dans la fenetre du formulaire (upload.cgi) -
en php/psp ce script sera effectivement executé une fois l'upload fait

- La requete (GET) qui affiche le contenu du pop-up de progression, qui
est elle gérée par l'autre script.

Comme le pop-up de progression est déclanché par un javascript (donc sur
le navigateur), AVANT l'envoi du formulaire (onsubmit est executé avant
de faire la requete POST), le script d'upload est bien executé avant -
et peut se prolonger pendant - que l'autre requête (l'envoi de fichier)
ne soit fait. La difficulté est de permettre à ce script de connaitre la
taille des données reçus à un instant T par le serveur sur une autre
requête.

Ce qu'il faut savoir c'est ou sont stokées les données au fur et a
mesure de leur réception par le premier script. Certainement dans un
fichier, mais ou ?? apres il faut que le second script (celui du popup)
puisse lire ce fichier (ou buffer) ou au moins connaitre la taille des
données reçues. Si c'est un buffer en RAM ça peut etre problematique car
un serveur web est multi-threadé avec des processus lourds, et les deux
requetes etant faites simultanément, il y a de fortes chances qu'elles
ne soient pas traitées par le meme processus. Dans le cas d'un fichier
c'est plus simple. Je ne connais pas la stratégie de mod_python sur ce
point là (mais ça m'interesse de savoir).

-

> Je vais essayer de faire des tests...
>
> --
>    Frédéric

-- 
           Stéphane Bonhomme           --           Exselt Services


        Formations, Conseil et Réalisations en Ingénierie Documentaire,
                    Technologies Web et Logiciels Libres 
             stephane@???   -   http://www.exselt.com
                04 57 39 30 78        /      06 88 57 27 08