2009-12-26 12 views
0

J'ai utilisé Flash Player 10 et Flex SDK 3.4. Le code comme suite:FileReference.load() n'est pas à l'exception

// Following comes callbacks 
function imageLoadOpenCallback(evt:Event):void 
{ 
    trace("in--open"); 
} 

function imageLoadCompleteCallback(evt:Event):void 
{ 
    trace("in--load"); 
    var fr:FileReference = evt.target as FileReference; 
    trace(fr.data); 
} 

function imageLoadErrorCallback(evt:IOErrorEvent):void 
{ 
    trace("in--ioerror"); 
} 

function imageSelectCancelCallback(evt:Event):void 
{ 
    trace("in cancel"); 
} 

function imageSelectCallback(evt:Event):void 
{ 
    trace("in -- select"); 
    for (var i:int=0; i<frl.fileList.length; i++) 
    { 

     frl.fileList[i].addEventListener(Event.OPEN, imageLoadOpenCallback); 
     frl.fileList[i].addEventListener(Event.COMPLETE, imageLoadCompleteCallback); 
     frl.fileList[i].addEventListener(IOErrorEvent.IO_ERROR, imageLoadErrorCallback); 
     frl.fileList[i].load(); 
     trace(frl.fileList[i]); 
     trace(frl.fileList[i].creationDate); 
     trace(frl.fileList[i].creator); 
     trace(frl.fileList[i].data); 
     trace(frl.fileList[i].name); 
    } 
} 


// Following comes UI handlers 
function onAddPictures():void 
{ 
    var imageFilter:FileFilter = new FileFilter("Images", "*.jpg;*.png"); 
    frl.addEventListener(Event.SELECT, imageSelectCallback); 
    frl.addEventListener(Event.CANCEL, imageSelectCancelCallback); 
    frl.browse([imageFilter]); 
} 

Seul le gestionnaire imageSelectCancelCallback s'appelle lorsque je sélectionne des fichiers dans la boîte de dialogue. Mais aucun gestionnaire load/open/io_error n'est appelé du tout. J'ai un exemple de code Google, dans lequel il a utilisé FileReference au lieu de FileReferenceList. Je ne connais pas la raison, pourriez-vous s'il vous plaît m'aider?

+0

Pourriez-vous s'il vous plaît formater votre code correctement? – poke

+0

Le code ci-dessus, copié dans mon projet, fonctionne exactement comme je m'y attendais - le gestionnaire select est appelé lorsque je clique sur OK, le gestionnaire de chargement est appelé après que chaque fichier individuel a été chargé. –

Répondre

0

La principale raison d'utiliser FileReferenceList au lieu de FileReference serait si vous avez besoin de télécharger plusieurs fichiers à la fois. Si vous souhaitez uniquement autoriser le téléchargement d'un fichier à la fois, utilisez simplement FileReference.

Une certaine clarification: imageSelectCallback(), et pas imageSelectCancelCallback(), devrait être appelée lorsque vous sélectionnez des fichiers dans le navigateur de fichiers ET cliquez sur OK. imageSelectCancelCallback() n'est appelée que lorsque vous cliquez sur Annuler. En dehors de cela, je n'ai jamais utilisé l'API load(), mais j'ai utilisé l'API upload(URLRequest). Je ne suis pas sûr de votre cas d'utilisation, mais si vous devez télécharger une image sur un serveur, vous devez utiliser la méthode upload().

En parlant d'événements de téléchargement, j'ai rencontré quelques problèmes de fiabilité lors de l'écoute des événements Event.COMPLETE, donc j'ai obtenu de meilleurs résultats en écoutant DataEvent.UPLOAD_COMPLETE_DATA.

1

Assurez-vous que dans les paramètres de votre compilateur pour flex, vous avez au moins 10.0.0 pour "Utiliser une version spécifique".

2

Dans l'air les objets fileReference dans fileReferenceList ne déclenchent pas l'événement complet lorsque vous effectuez fileList[i].load(). Dans un projet Flex, cela fonctionne très bien. Adobe n'a pas répondu correctement aux rapports de bogue.