Download fichier avec progressbar qui ne marche pas

Signaler
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
-
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
-
Bonsoir à toutes et à tous,

je suis en train de bidouiller un script pour faie un download de fichier avec filereference. Le fichier se télécharge correctement, le problème c'est que je souhaite ajouter une progressbar qui suit le téléchargement du fichier et je ne parviens pas à afficher la progression.
J'ai trouvé le script sur Flashkod, c'est un script qui avait été donné à un autre membre du forum par Orange73, donc si jamais tu lis mon post Orange73, je pense que tu pourras peut-être m'aider.

Voici mon script :
import flash.net.FileReference;

mess_info = "";
barre_charge._visible = false;
pct_charge.text._visible = false;
fond_charge._visible = false;

var dl:FileReference = new FileReference();

function progressbar(){
total = dl.download.getBytesTotal();
downloaded = dl.download.getBytesLoaded();
pct = downloaded/total*100;
pct_charge.text = Math.round(pct)+'%';
barre_charge._width = fond_charge._width/100*pct;
barre_charge._visible = true;
pct_charge.text._visible = true;
fond_charge._visible = true;
}

function download_file(pFile:String){
    if(dl.download(pFile)){
        trace("download ok")
mess_info = "téléchargement terminé";
    }
    else{
        trace("download error");
mess_info = "ERREUR";
    }
}

btn_download.onRelease = function(){
    download_file("http://www.musichrono.com/lecteur/fichier.mp3");
progressbar();
}


Merci,

BBFUNK01

10 réponses

Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Bonsoir.

en regardant ton code, je vois que la fonction progressBar n'est lancée qu'une fois au clic sur un bouton ...

Peg'
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Salut Peg',

oui effectivement c'est une maladresse de ma part (j'étais fatigué hier soir :) ), j'ai essayé en mettant la fonction "progressbar()" au début de ma fonction "download_file()" mais ça ne marche guère mieux :
import flash.net.FileReference;

mess_info = "";
barre_charge._visible = false;
pct_charge.text._visible = false;
fond_charge._visible = false;

var dl:FileReference = new FileReference();

function progressbar(){
total = dl.download.getBytesTotal();
downloaded = dl.download.getBytesLoaded();
pct = downloaded/total*100;
pct_charge.text = Math.round(pct)+'%';
barre_charge._width = fond_charge._width/100*pct;
barre_charge._visible = true;
pct_charge.text._visible = true;
fond_charge._visible = true;
}

function download_file(pFile:String){
progressbar();
    if(dl.download(pFile)){
        trace("download ok")
mess_info = "téléchargement terminé";
    }
    else{
        trace("download error");
mess_info = "ERREUR";
    }
}

btn_download.onRelease = function(){
    download_file("http://www.musichrono.com/lecteur/fichier.mp3");
}


Je vais essayer de résoudre le problème, si tu as des suggestions je suis preneur.

Merci,

BBFUNK01
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
tu dois appeler ta fonction qui réactualise ta barre tout le long de ton chargement avec un onEnterFrame. Ensuite, tu le détruit pour éviter les erreurs.

Peg'
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Re Peg',

et bien je galère un peu, j'ai ajouté un onEnterFrame dans mon code et ça ne marche pas encore correctement :
import flash.net.FileReference;

mess_info = "";
pct_charge = "";

var dl:FileReference = new FileReference();

function download_file(pFile:String){
function onEnterFrame(){
    var pc = dl.download.getBytesLoaded()*100/dl.download.getBytesTotal();
    Barre_charge._xscale = pc;
    pc_charge = Math.round(pc)+" %";
    if (pc >= 100){
        delete onEnterFrame;
    }
}
    if(dl.download(pFile)){
        trace("download ok")
mess_info = "téléchargement terminé";
    }
    else{
        trace("download error");
mess_info = "ERREUR";
    }
}

btn_download.onRelease = function(){
    download_file("http://www.musichrono.com/lecteur/fichier.mp3");
}


A mon avis je n'ai pas mis mon onEnterFrame au bon endroit, je vais essayer de remanier le code, si tu vois comment je pourrais faire pour arranger le truc je veux bien un petit coup de main s.t.p.

Merci,

BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Je viens également de songer à une chose :
étant donné que le lancement du téléchargement du fichier est activé par le clic (ou annulé aussi) sur la fenêtre qui s'ouvre après le onRelease dans mon code, il faudrait plutôt que je déclenche la progression de ma barre suite au choix de l'utilisateur : "annuler" ou "enregistrer". Peut-être en ajoutant un listener ? Par contre pour mettre un listener sur le clic "annuler" ou "enregistrer" dans la fenêtre qui s'ouvre... et bien je ne sais pas vraiment comment faire.

BBFUNK01
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
tu t'y prends super mal ...

De mémoire, en AS2 il suffit de faire ça :

this.onEnterFrame = function () {
// et là tu met le code de ta barre de progression.
}

pas besoin d'imbriquer quoique ce soit.

Peg'
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
ok,

et donc je mets le "this.onEnterFrame = function()" après mon "function download_file(pFile:String)" si je comprends bien ?

Je vais tester ça, merci Peg'.

BBFUNK01
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
tu dois déclencher ton enterFrame lors du chargement du fichier, donc lors du clic sur le bouton.

Regarde bien la structure de ton code et tu comprendras rapidement où mettre quoi.

Peg'
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Décidément je n'y arrive pas : j'ai mis "this.onEnterFrame = function()" à la suite du "onRelease" et du "download_file" et rien ne s'affiche, j'ai essayé en mettant "_parent", "this._parent", ou bien "_root" à la suite des occurrences de mes clips nommés dans le "this.onEnterFrame" mais sans résultat. Je ne vais pas t'implorer Peg' mais peux-tu m'aider à faire fonctionner mon code s.t.p. ?

Le voici après modification :
import flash.net.FileReference;

var dl:FileReference = new FileReference();

mess_info = "";
pct_charge = "";
barre_charge._visible = false;
fond_charge._visible = false;

function download_file(pFile:String){
if(dl.download(pFile)){
        trace("download ok");
    }
    else{
        trace("download error");
mess_info = "ERREUR";
    }
}

btn_download.onRelease = function(){
download_file("http://www.musichrono.com/lecteur/fichier.mp3");
this.onEnterFrame = function(){
barre_charge._visible = true;
fond_charge._visible = true;
   	var pc = dl.download.getBytesLoaded()*100/dl.download.getBytesTotal();
    barre_charge._xscale = pc;
    pc_charge = Math.round(pc)+" %";
trace(pc_charge);
   	if (pc >= 100){
mess_info = "téléchargement terminé";
delete this.onEnterFrame;
    	}
}
}


Merci,

BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Bon et bien du coup je me suis inspiré d'un autre code sur lequel c'était plus simple d'ajouter une barre de progression et ça fonctionne.

Le code :
import flash.net.FileReference;

var pc_charge:TextField;
pc_charge.html = true;
mess_info = "";
barre_charge._visible = false;
fond_charge._visible = false;

var Dmclistener:Object = new Object();
Dmclistener.onSelect = function(DmcFichier:FileReference):Void  {
trace("onSelect: " + DmcFichier.name);
};
Dmclistener.onCancel = function(DmcFichier:FileReference):Void  {
trace("onCancel: " + DmcFichier.name);
};
Dmclistener.onOpen = function(DmcFichier:FileReference):Void  {
trace("onOpen: " + DmcFichier.name);
};
Dmclistener.onProgress = function(DmcFichier:FileReference, bytesLoaded:Number, bytesTotal:Number):Void  {
trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);
barre_charge._visible = true;
fond_charge._visible = true;
    barre_charge._xscale = 0;
    onEnterFrame = function(){
    var pc = bytesLoaded*100/bytesTotal;
    barre_charge._xscale = pc;
trace(barre_charge);
pc_charge.htmlText = Math.round(pc)+" %";
trace(pc_charge);
    if (pc >= 100){
    mess_info = "téléchargement terminé";
    delete onEnterFrame;
    barre_charge._visible = false;
fond_charge._visible = false;
        }
}
};
Dmclistener.onComplete = function(DmcFichier:FileReference):Void  {
trace("onComplete: " + DmcFichier.name);
trace(DmcFichier.name);
trace(DmcFichier.size);
trace(DmcFichier.type);
trace(DmcFichier.creationDate);
trace(DmcFichier.modificationDate);
trace(DmcFichier.creator + " (Mac)");
};
Dmclistener.onHTTPError = function(DmcFichier:FileReference):Void  {
trace("onHTTPError: " + DmcFichier.name);
};
Dmclistener.onIOError = function(DmcFichier:FileReference):Void  {
trace("onIOError: " + DmcFichier.name);
};
Dmclistener.onSecurityError = function(DmcFichier:FileReference, errorString:String):Void  {
trace("onSecurityError: " + DmcFichier.name + " errorString: " + errorString);
};
/* Objet FileReference */
var DmcFileReference = new FileReference();
DmcFileReference.addListener(Dmclistener);
/* Gestion du bouton Télécharger*/
/* Nécessite un serveur */
var urls = "http://www.monsite.com/";
var arret = false;
var dmcecouteur = new Object();
dmcecouteur.click = function(evt) {
/* Lancement de download */
if (!DmcFileReference.download(_root.urls + "fichier.mp3", "fichier.mp3")) {
trace("La boîte de dialogue \nne s'est pas ouverte.");
}
};
bt_telecharger.addEventListener("click", dmcecouteur);


Problème réglé donc :)

BBFUNK01