I'm using Flex in Flash Player 10 on Windows, using FileReference
to load a file into memory, as below.
My issue is that when a file is locked by Windows, my FileReference
is not giving me any feedback that the file is inaccessible--it simply never dispatches any events after my calling load()
.
Does anyone have insight into how to tell that Flash Player is unable to open the file?
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());
}
A possible (dirty) workaround might be to wait for -let say- 10 seconds, and suppose that the file isn't available if no event has triggered then.
Using a setTimeout
(and clearing it with clearTimeout
in your COMPLETE
and *_ERROR
events handlers) might do the trick.
I'll be glad if someone could come up with a nicer solution, though.
EDIT: Of course you might want to listen to HTTP_STATUS
event (waiting for a 202 answer - if I understood this documentation correctly) rather than waiting for COMPLETE
or *_ERROR
.