Я работаю с 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/
Рабочий процесс на ПК работает так:
- Создать ссылку на файл
- присоединить
addEventListener
для Event.SELECT
и Event.COMPLETE
- вызов метода
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 ");
}