Я использую Flex в Flash Player 10 в Windows, с помощью FileReference
загрузить файл в память, как ниже.
Моя проблема - это, когда файл заблокирован Windows, моим FileReference
не дает мне обратной связи, что файл недоступен - это просто никогда не диспетчеризирует событий после моего вызова load()
.
У кого-либо есть понимание, как сказать, что Flash player не может открыть файл?
var fileReference:FileReference = new FileReference();
private function onClick():void {
fileReference = new FileReference();
fileReference.addEventListener(Event.SELECT, onSelect);
fileReference.addEventListener(Event.COMPLETE, onComplete);
fileReference.addEventListener(Event.CANCEL, onOther);
fileReference.addEventListener(IOErrorEvent.IO_ERROR, onOther);
fileReference.addEventListener(ProgressEvent.PROGRESS, onOther);
fileReference.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onOther);
// I've tried adding all of the other declared events
// for FileReference here as well
fileReference.browse();
}
private function onSelect(event:Event):void {
trace(fileReference.name);
try {
fileReference.load();
} catch (e:Error) {
trace(e);
}
}
private function onComplete(event:Event):void {
trace(fileReference.data.length);
}
private function onOther(event:Event):void {
trace("other:" + event.toString());
}
Возможный (грязный) обходной путь может заключаться в том, чтобы подождать, скажем, 10 секунд, и предположить, что файл недоступен, если тогда не сработало ни одно событие.
Использование setTimeout
(и очистка его с помощью clearTimeout
в ваших обработчиках событий COMPLETE
и * _ ERROR
) может помочь.
Я буду рад, если кто-нибудь сможет предложить более хорошее решение.
РЕДАКТИРОВАТЬ: Конечно, вы можете захотеть прослушать событие HTTP_STATUS
(ожидая ответа 202 - если я правильно понял эту документацию ), а не ждать COMPLETE
или * _ ОШИБКА
.