ссылка на файл flash cs4.Event.COMPLETE не вызывается на MAC, - PullRequest
0 голосов
/ 16 июня 2010

Я работаю с fileReference, однако у меня возникают проблемы с запуском Safari на MAC ...

EDIT: Приведенный ниже пример также не работает в Safari на MAC ...

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

Рабочий процесс на ПК работает так:

  1. Создать ссылку на файл
  2. присоединить addEventListener для Event.SELECT и Event.COMPLETE
  3. вызов метода browse()

На ПК Event.SELECT запускается, когда файл выбран. Event.COMPLETE срабатывает, когда данные файла доступны для прошивки. Если я выберу файл размером 500 МБ, пройдет несколько секунд, прежде чем будет запущен Event.COMPLETE. Если я пытаюсь получить доступ к свойствам данных файла (например, чтение потока данных) до того, как Event.COMPLETE будет запущен, я получу нулевые ошибки ссылки ...

Пока все хорошо ...

Однако на MAC (в частности Safari, не проверенных в других браузерах), Event.COMPLETE не запускается.

Я проверил документы Adobe, которые говорят, что Event.COMPLETE запускается, когда загрузка завершена. Так почему запускается в Windows, когда fileReference проанализировал файл, но метод загрузки еще не был вызван ...

Может кто-нибудь помочь?

Вот фрагменты кода, над которым я работаю:

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 ");
}

Ответы [ 2 ]

1 голос
/ 20 декабря 2013

определенно ошибка SDK 3.4 У меня есть раунд здесь

        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

Я попробовал его на SDK3.9, он все тот же, поэтому я подал ошибку здесь: https://bugbase.adobe.com/index.cfm?event=bug&id=3687113

0 голосов
/ 12 августа 2010

Кажется, я заработал, используя DataEvent.UPLOAD_COMPLETE_DATA вместо 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";
};
...