Re: Progressbar lors d'un upload

Pàgina inicial

Reply to this message
Autor: Stephane Bonhomme
Data:  
A: Frédéric
CC: guilde
Assumpte: Re: Progressbar lors d'un upload
Salut Fred

C'est assez sioux comme méthode, mais pas facile à comprendre, une
version python sera clairement plus lisible :)

Donc quand l'utilisateur soumet le formulaire d'upload, la fonction
javascript appellée (StartUpload) provoque l'ouverture du popup avec
comme contenu le résultat du script perl upload_status.cgi.

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 %...)

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.

J'espere que ça peut t'aider.

Stéphane.

Le vendredi 29 août 2008 à 13:04 +0100, Frédéric a écrit :
> Bonjour,
>
> J'ai implémenté une formailre d'upload de fichier en mod_python (PSP),
> et j'aimerais ajouter un progressbar pendant le transfert, pour savoir
> où on en est.
>
> J'ai trouvé ce code qui le fait :
>
>     http://www.sibsoft.net/downloads/XUpload_2_6.zip

>
> En gros, il y a un script (upload_status.cgi) qui est lancé par
> 'onSubmit', donc dès qu'on clique sur le bouton envoi, qui gère le
> rafraichissement temp réel, et un autre (upload.cgi), lancé par
> 'action'.
>
> Déjà, il me semblait que le script appelé par 'action' n'était appelé
> qu'une fois le transfert effectué, et toutes les données reçues sur le
> serveur. Mais visiblement, ce n'est pas le cas, car le premier script
> (celui lancé immédiatement par 'onSubmit') attend un peu que le second
> ait créé un fichier...
>
> Ensuite, le script upload_status.cgi boucle et met à jour le progressbar
> en modifiant directement la structure xml du document.
>
> Est-ce que ce mécanisme ne fonctionne qu'avec des cgi, ou bien peut-on
> le faire avec du PHP, ou du python PSP (qui fonctionne un peu à la
> manière du PHP) ?
>
> Si quelqu'un se sent de jeter un coup d'oeil pour m'expliquer en gros
> comment ça fonctionne, que je puisse traduire ça en python...
>
> Merci d'avance.
>
> --
>    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