Download fichier avec progressbar qui ne marche pas

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 25 janv. 2010 à 21:43
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 26 janv. 2010 à 23:13
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

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
25 janv. 2010 à 22:07
Bonsoir.

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

Peg'
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 14:12
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
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
26 janv. 2010 à 14:36
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'
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 15:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 15:16
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
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
26 janv. 2010 à 15:36
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'
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 15:44
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
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
26 janv. 2010 à 15:50
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'
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 16:18
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
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 janv. 2010 à 23:13
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
0