2010-06-16 8 views
0

Je travaille avec un FileReference, mais je vais avoir des problèmes en cours d'exécution sur Safari sur MAC ...référence de fichier flash cs4. Event.COMPLETE pas appelé sur un MAC,

EDIT: Le exemple ci-dessous également le travail ne marche pas sur Safari sur un MAC ...

http://www.permadi.com/blog/2010/06/flash-as3-using-filereference-to-load-files-example-for-flash-cs4-and-above/

Le flux de travail sur un PC fonctionne en tant que tel:

  1. Créer un fichier référence
  2. attach addEventListener pour Event.SELECT et Event.COMPLETE
  3. appel à la méthode browse()

Sur un PC, Event.SELECT est tiré lorsqu'un fichier a été sélectionné. Event.COMPLETE est déclenché lorsque les données du fichier sont disponibles pour clignoter. Si je sélectionne un fichier de 500 Mo, cela prend quelques secondes avant que Event.COMPLETE soit renvoyé. Si je tente d'accéder aux propriétés de données de fichiers (tels que la lecture du flux de données) avant Event.COMPLETE est tiré, je reçois des erreurs de référence null ...

So far so good ...

Cependant, sur un MAC (spécifiquement Safari, pas testé d'autres navigateurs), le Event.COMPLETE n'est pas viré.

J'ai vérifié les documents Adobe, qui indiquent Event.COMPLETE est renvoyé lorsque le téléchargement est terminé. Alors pourquoi -t-elle obtenir le feu sur les fenêtres lorsque le fileReference a analysé le fichier, mais la méthode de téléchargement n'a pas encore été appelé ...

Quelqu'un peut-il aider?

est ici des extraits du code Je travaille sur:

public function browseFile(target:Object):void 
{ 
    var imagesFilter:FileFilter = new FileFilter("Allowed files", "*.jpg;*.bmp;*.flv;"); 
    fileReference.browse([imagesFilter]); 
    fileReference.addEventListener(Event.SELECT, fileSelect); 
    fileReference.addEventListener(Event.COMPLETE, fileSelectComplete); 
} 


private function fileSelect(event:Event):void 
{  
    // update label - IMPORTANT for large files as there's a delay while flash parses file, before control is handed back to this script... 
    setStatusLabel("...loading file"); 

    var fileReference:FileReference = event.target as FileReference; 

    fileReference.addEventListener(Event.COMPLETE, fileSelectComplete); 


    // load the file into the fileReference object 
    fileReference.load(); 

} 


    // Called when upload file has been processed by flash (a few secs for large files, or fileRef.data is null...) 
private function fileSelectComplete(event:Event):void 
{ 
    var fileReference:FileReference=event.target as FileReference; 

    trace("ready to do things - but not fired on Safari on a MAC "); 
} 
+0

n'importe qui? Bump bump –

+0

Je peux confirmer le problème, mais je n'ai pas trouvé de solution. – starkos

Répondre

0

Il me semble avoir obtenu fonctionner, en utilisant DataEvent.UPLOAD_COMPLETE_DATA au lieu de Event.COMPLETE.

var fileRef:FileReference = new FileReference(); 
fileRef.addEventListener(Event.SELECT, onFileSelected); 
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadComplete); 

function onFileSelected(event:Event):void { 
    statusBar.text = "File upload started"; 
    fileRef.upload(FILE_UPLOAD_URL); 
}; 

function onUploadComplete(event:Event):void { 
    statusBar.text = "File upload completed"; 
}; 
+0

Fantastique! Je vais courir le changement et revenir à vous -désolé ça fait si longtemps! –

1

certainement un bug de sdk 3.4 J'ai un tour de travail ici

 var fr:FileReference = e.currentTarget as FileReference; 
     fr.addEventListener(Event.COMPLETE, onModelDone); 
     fr.addEventListener(ProgressEvent.PROGRESS, onProgress); 
//   trace("loading..."); 
     setTimeout(function():void {fr.load()}, 1); // put it here for delay 

Je l'ai essayé sur sdk3.9 il toujours le même, donc je un bug ici déposé: https://bugbase.adobe.com/index.cfm?event=bug&id=3687113