2009-11-10 7 views
0

Pour charger 3 fichiers localement dans Flash Player, on pourrait utiliser quelque chose comme ça à gérer la séquence après que l'utilisateur a choisi les fichiers ...Le nom de fichier d'un fichier vient d'être chargé via FileReference n'est pas disponible

private function uploadList(evt:Event):void{ 

     var arr:Array = fileReferenceList.fileList; 

     for each(var item:FileReference in arr){ 
      item.addEventListener(Event.COMPLETE, onFileLoadComplete); 
      item.load(); 
     } 

    } 

// Etape 2 - aller de l'avant et charger le fichier et attendre l'étape 3 ... cela sera appelé trois fois dans ce cas d'utilisation.

private function onFileLoadComplete(e:Event):void { 

      var loader:Loader = new Loader(); 

      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete); 
      loader.loadBytes(FileReference(e.target).data); 
    } 

// Étape 3 - Flash Player a chargé le fichier et est prêt pour le traitement ... // cet exemple est une image étant bourrée dans un objet BitmapData ...

private function onDataLoadComplete(e:Event):void { 
     var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData; 
     var loader:Loader = Loader(e.target.loader); 

...

}

// Étape 4 - Où est le nom du fichier et la taille de fichier situé octet pour chaque fichier en passant par l'étape 3?

Je n'ai pas réussi à localiser ces données dans des objets existants.

Ma résolution ....

Je farcir les informations dans un dictionnaire simple et le récupérer plus tard.

Peut-être existe-t-il d'autres solutions?

private function onFileLoadComplete(e:Event):void { 

     if(FileReference(e.target).data.length == 0){ 
      return; 
     }   

      var loader:Loader = new Loader(); 
     filenameDict[loader] = String(FileReference(e.target).name); 

      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete); 
      loader.loadBytes(FileReference(e.target).data); 
    } 


    private function onDataLoadComplete(e:Event):void { 
     var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData; 

     var loader:Loader = Loader(e.target.loader); 
     var file:String = filenameDict[loader]; 
     delete filenameDict[loader]; 

Répondre

0

Vous pouvez le faire avec des tableaux, mais comme vous pouvez le voir dans le code, Dictionary est le moyen plus facile.

var files:Array = []; 
var loaders:Array = []; 
private function onFileLoadComplete(e:Event):void 
{ 
    var loader:Loader = new Loader(); 
    files.push(e.target); 
    loaders.push(loader); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete); 
    loader.loadBytes(FileReference(e.target).data); 
} 
private function onDataLoadComplete(e:Event):void 
{ 
    var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData; 
    var loader:Loader = Loader(e.target.loader); 
    var index:Number = loaders.indexOf(loader); 
    var file:String = FileReference(files[index]).name; 
    /* 
    * Clear the arrays to get rid of unwanted references that might 
    * prevent them from being garbage collected. 
    * */ 
    files.splice(index); 
    loaders.splice(index); 
} 

j'étais inconscient de FileReference de FP10 quand j'ai fait la première version de ce poste.

Questions connexes