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

ActionScript 3 Discussion :

MASAPI - Vérifier si un fichier est chargé


Sujet :

ActionScript 3

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut MASAPI - Vérifier si un fichier est chargé
    Bonjour à tous et merci d'avance pour votre aide.

    Je télecharge plusieurs fichiers avec Maspai et j'aimerais tout simplement effectuer un if pour savoir si tels ou tels fichier et chargé.
    J'ai consulté le wiki masapi, mais ça ne m'aide pas trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import ch.capi.net.*; 
     
    var cml:CompositeMassLoader = new CompositeMassLoader(); 
    for(var v:uint=1;v<29;v++) 
    {
    	cml.addFile("images/"+v+".jpg");
    } 
    cml.start(); 
     
    if...
    http://code.google.com/p/masapi/w/list
    Merci d'avance de votre aide.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    dans la doc que tu nous fournis et notamment ici tu as des infos concernant les fichiers déjà chargés. Ils se trouvent dans l'Array filesSuccess

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Je t'assure que j'ai essayé avec filesSuccess dans un trace.
    Et j'obtient juste des retour à la ligne.

    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
     
    import ch.capi.net.*; 
    import ch.capi.events.*; 
     
    var cml:CompositeMassLoader = new CompositeMassLoader(); 
    cml.massLoader.addEventListener(ProgressEvent.PROGRESS, onProgress); 
    for(var v:uint=1;v<29;v++) 
    {
    	cml.addFile("images/"+v+".jpg");
    } 
     
    cml.start(); 
     
    function onProgress(evt:ProgressEvent):void {         
    var info:ILoadInfo = evt.target.loadInfo;         
    //var info:ILoadInfo = cml.loadInfo;                 
     trace(info.filesSuccess);         
    }

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Que retourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trace(String(info.filesSuccess.length));
    ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Cela me donne une série de 0, l'un en dessous de l'autre.
    Est le nombre de 0 dépasse le nombre total de fichier copié, donc je ne comprend pas.

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Je comprends pas trop ta logique, tu essayes de charger en mass des fichiers se trouvant dans ton projet ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cml.addFile("images/"+v+".jpg");
    Ce n'est pas des fichiers distants ca...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Et bien ces fichiers ne sont pas dans ma biblio, ni sur scéne.
    Ils sont chargé depuis le dossier images qui se trouve sur mon serveur.

    image 1: un preaload du swf
    image 2: on entre dans le site avec thumbnail des 28 images.
    image 2: AS massload des 28 images

    Et en cliquant sur l'un des thumbnail, un if afin de vérifier si l'image lié au thumbnail est chargé ou pas encore.

    Merci de ton aide encore

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Tu as essayé quelque chose comme ca ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cml.addFile(URL_DE_TON_SERVEUR + "images/"+v+".jpg");

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Je ne pense pas que le probléme soit lié à cela.
    Mais j'ai tout de même essayé et ça donne le même résultat.

    J'ai juste oublier d'ajouter que le téléchargement des fichiers ce déroule parfaitement. Mon seul probléme est de confirmer si oui ou non le fichier et telecharger.

    Encore merci du temps que tu m'accorde.

  10. #10
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Peux tu montrer l'état actuel de ton code stp ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Je pense avoir réussi un bout de chemin, voici:

    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
     
    import ch.capi.net.*; 
     
    var cml:CompositeMassLoader = new CompositeMassLoader(); 
     
    for(var v:uint=1;v<29;v++) 
    {
    	//cml.addFile("images/"+v+".jpg");
    	var file:ILoadableFile = cml.addFile("images/"+v+".jpg", LoadableFileType.BINARY);
    } 
     
    cml.start(); 
     
    T1.addEventListener(MouseEvent.CLICK ,Block_click );
    function Block_click(evt:MouseEvent):void{
     
    //var ld2:Loader = file.getData("flash.display.Loader");
    //this.addChild (ld2); ld2.x = 0 ; ld2.y = 0;
     
    var infos:ILoadInfo = cml.massLoader.loadInfo;
    trace(infos.filesSuccess);
    }
    Et en trace j'obtient donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    images/1.jpg (binary),images/2.jpg (binary),images/3.jpg (binary),images/4.jpg (binary),images/5.jpg (binary),images/6.jpg (binary),images/7.jpg (binary),images/8.jpg (binary),images/9.jpg (binary),images/10.jpg (binary),images/11.jpg (binary),images/12.jpg (binary),images/13.jpg (binary),images/14.jpg (binary),images/15.jpg (binary),images/16.jpg (binary),images/17.jpg (binary),images/18.jpg (binary),images/19.jpg (binary),images/20.jpg (binary),images/21.jpg (binary),images/22.jpg (binary),images/23.jpg (binary),images/24.jpg (binary),images/25.jpg (binary),images/26.jpg (binary),images/27.jpg (binary),images/28.jpg (binary)
    Donc à mon sens, je devrais faire un if afin de retrouver dans le string si tels ou tels fichier est chargé ou pas. Je trouve cette méthode un peu bricolo mais je n'ai trouvé que ça.

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    tu peux tester l'existence d'une valeur dans un tableau avec indexOf() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(infos.filesSuccess.indexOf("fichier1") != -1)
       trace("fichier1 chargé");

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    J'aurais tant voulu te dire que ça marche enfin et de ne plus abusé de ton précieux temps.
    J'ai essayé avec indexOf("22"), indexOf(22), indexOf("images22.jpg") et j'en passe, mais le résultat est nul.

    J'ai même été voir là http://livedocs.adobe.com/flash/9.0_...html#indexOf()

    Mais sans résultat.
    Encore merci

  14. #14
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par Rifton007 Voir le message
    Jet j'en passe
    y compris "images/22.jpg" par exemple ?

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Oui ça aussi j'avais essayé, mais rien.

    J'ai même tenter un push sur infos.filesSuccess.
    Ensuite récuperer ce push avec indexOf, non plus rien.
    Il semblerait même qu'il ne s'ajoute même pas.

    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
     
    T1.addEventListener(MouseEvent.CLICK ,Block_click );
    function Block_click(evt:MouseEvent):void{
     
    //var ld2:Loader = file.getData("flash.display.Loader");
    //this.addChild (ld2); ld2.x = 0 ; ld2.y = 0;
     
    //var arry_test:Array = new Array();
    //arry_test.push("bonjour");
    //if(arry_test.indexOf("bonjour") != -1)
    //trace("arry_test: bonjour ok");
     
    var infos:ILoadInfo = cml.massLoader.loadInfo;
    //infos.filesSuccess.push("bonjour");
    trace (infos.filesSuccess)
    if(infos.filesSuccess.indexOf("images/22.jpg ") != -1)
       trace("filesSuccess: ok");
    }

  16. #16
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Avec les events MassLoadEvent.FILE_OPEN et MassLoadEvent.FILE_CLOSE tu dois pouvoir arriver je pense à voir quel fichier commence à être chargé et quel fichier vient de finir de charger (en échec ou succès). Tu peux déjà essayer de regarder si ces events marchent juste pour tester

    Si ca marche, tu auras déjà une base assez fiable sur les fichiers chargés.

    Si j'ai le temps, je vais essayer d'utiliser un peu masapi, je connais pas

  17. #17
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Après quelques tests...

    l'événement ProgressEvent.PROGRESS sur cml me semble pas être la bonne solution pour détecter les fichiers chargés car cet événement ne semble pas se déclencher sur le 100% de chargement du fichier en question. Donc, si tu charges 2 fichiers ce tableau aura maximum une taille de 1 et le premier fichier apparait une fois le second fichier en cours de chargement.

    Par contre, j'ai fais un petit programme qui écoute pour chaque fichier les events Event.OPEN et Event.CLOSE et ca marche pas mal

    Voici le script (Flex à remettre en Flash facilement) :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?xml version="1.0"?>
    <!-- styles/TypeSelector.mxml -->
    <s:Application 
    	xmlns:fx="http://ns.adobe.com/mxml/2009" 
    	xmlns:mx="library://ns.adobe.com/flex/mx" 
    	xmlns:s="library://ns.adobe.com/flex/spark"
    	xmlns:as3="as3.*" creationComplete="load()">
     
    	<fx:Script>
    		<![CDATA[
    			import ch.capi.events.MassLoadEvent;
    			import ch.capi.net.CompositeMassLoader;
    			import ch.capi.net.ILoadInfo;
    			import ch.capi.net.ILoadableFile;
    			import ch.capi.net.IMassLoader;
    			import ch.capi.net.LoadableFileType;
     
    			private var _cml:CompositeMassLoader;
     
    			private function load():void
    			{
    				_cml = new CompositeMassLoader();
    				_cml.massLoader.addEventListener(Event.COMPLETE, onCmlComplete);
     
    				ajouteFichiers([
    						{fichier:"http://localhost/fichier1.txt", type:LoadableFileType.TEXT},
    						{fichier:"http://localhost/fichier2.txt", type:LoadableFileType.TEXT},
    						{fichier:"http://localhost/fichier3.txt", type:LoadableFileType.TEXT}
    						]);
     
    				_cml.start();
     
    			}
     
    			protected function ajouteFichiers(fichiers:Array):void
    			{
    				var file:ILoadableFile;
     
    				for each(var o:Object in fichiers)
    				{
    					file = _cml.addFile(o.fichier, o.type);
    					file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
    					file.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
    					file.addEventListener(Event.OPEN, handleOpen);
    					file.addEventListener(Event.COMPLETE, handleComplete);
    				}
    			}
     
    			protected function handleSecurityError(e:SecurityErrorEvent):void
    			{
    				ta.text += "SecurityErrorEvent sur : " + (e.target as ILoadableFile).urlRequest.url + "\n";
    			}
     
    			protected function handleIOError(e:IOErrorEvent):void
    			{
    				ta.text += "IOError sur : " + (e.target as ILoadableFile).urlRequest.url + "\n";
    			}		
     
    			protected function handleOpen(e:Event):void
    			{
    				ta.text += (e.target as ILoadableFile).urlRequest.url + " lancé \n";	
    			}
     
    			protected function handleComplete(e:Event):void
    			{
    				ta.text += (e.target as ILoadableFile).urlRequest.url + " chargé \n";	
    			}
     
    			protected function onCmlComplete(e:Event):void
    			{
    				ta.text += "Fini ! \n";
    				ta.text += "Fichiers dans le tableau filesSuccess : \n\n";
     
    				for each(var file:ILoadableFile in _cml.massLoader.loadInfo.filesSuccess)
    					ta.text += "\t" + file.urlRequest.url + "\n";
    			}
     
    		]]>
    	</fx:Script>
     
     
     
    	<s:TextArea id="ta" width="200" height="500" />
     
     
     
    </s:Application>

    Résultat :


  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Cela ma fort touché que tu aies pris la peine de faire ce code.
    Trés sincérement, merci.

    Ton code fonctionne du tonnere.
    Mais je n'y comprend plus rien, même ainsi impossible de savoir si oui on non le fichier est chargé.

    Les écouteurs sont tous OK.
    Si je fais un trace sur _cml.massLoader.loadInfo.filesSuccess, c'est OK ausi.
    Par contre le faire anisi impossible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    T1.addEventListener(MouseEvent.CLICK ,Block_click );
    function Block_click(evt:MouseEvent):void{
    if(_cml.massLoader.loadInfo.filesSuccess.indexOf("images/1.jpg") != -1)
       trace("OK 1.jpg");
    }
    Tu utilise quel version de Masapi ?
    Moi j'ai la Masapi 2.0 r173.

    Pourquoi je chercher à faire ce code?
    Le visiteur clique sur l'un des buttons (28 au total) qui execute un son et une animation.
    Mais si je n'arrive pas à faire un indexOf avant les effets, ils s'éxecutent mais l'image n'apparait qu'aprés.

    Encore merci,
    Et je m'excuse encore une fois de te retenir sur ce probléme.

  19. #19
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 67
    Points
    67
    Par défaut
    désolé de m'incruster dans une conversation déjà bien avancée. Mais j'ai une question. Dans ce code, pourquoi met-tu cette fonction trace sur un évènement click ? tu passe tes tests à cliquer comme un malade pour être sûr de ne pas rater le trace d'un chargement ? Ca me paraitrait plus logique d'utiliser un event oncomplete non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    T1.addEventListener(MouseEvent.CLICK ,Block_click );
    function Block_click(evt:MouseEvent):void{
     
    var infos:ILoadInfo = cml.massLoader.loadInfo;
    trace(infos.filesSuccess);
    }
    Sinon pour les chargement en masse il existe une libraire chez greensock. Je ne l'ai pas utilisée mais je fait confiance à 100% à Jack qui est un excellent developpeur flash.

  20. #20
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    Citation Envoyé par Rifton007 Voir le message
    Tu utilise quel version de Masapi ?
    Moi j'ai la Masapi 2.0 r173.
    j'utilise la même version.

    Ce que j'essaie de te faire comprendre, c'est qu'il vaut mieux éviter de faire appel à filesSuccess pendant le traitement des fichiers car à mon avis, tu y feras appel dans l'event ProgressEvent.PROGRESS or un fichier sera placé dans filesSuccess je pense sur l'event Event.COMPLETE qui sera appelé après ProgressEvent.PROGRESS (logique). Du coup, si tu as 10 fichiers, je pense que tu verras un length de filesSuccess valant au maximum 9 sur l'événement ProgressEvent.PROGRESS.

    A mon avis et c'est ce que je te propose dans le code, il vaut mieux utiliser un event Event.OPEN et Event.COMPLETE sur chaque fichier pour avoir le traitement "en temps réel".

    Un event Event.COMPLETE sur le massLoader quand à lui te permettra de savoir quand tous tes chargements seront complétés (en succès ou échec) et ton fameux tableau filesSuccess sera accessible et complet si tu veux itérer dessus.

    PS: lors de tes tests, je te voyais essayer d'insérer des éléments dans filesSuccess. A priori, tu ne peux pas il est en lecture seule.


    @bokan : pas de soucis le forum est un lieu d'échanges

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment vérifier qu'un fichier est déjà ouvert ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 04/08/2011, 12h23
  2. Réponses: 2
    Dernier message: 17/11/2008, 11h22
  3. [Script] Vérifier si un module est chargé ?
    Par brolon dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 19/06/2008, 17h06
  4. Réponses: 11
    Dernier message: 11/01/2008, 19h13
  5. Réponses: 4
    Dernier message: 18/01/2006, 09h49

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