我在Windows上使用Flex在Flash Player 10中,使用FileReference
将文件加载到内存中,如下所示。
我的问题是,当一个文件被Windows锁定时,我的FileReference
没有给我任何关于该文件无法访问的反馈 - 它在调用load()
之后根本不会发送任何事件。< / p>
有没有人了解如何判断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());
}
答案 0 :(得分:2)
可能的(脏)解决方法可能是等待-let说 - 10秒,并假设如果当时没有触发任何事件,则该文件不可用。
使用setTimeout
(并在clearTimeout
和COMPLETE
事件处理程序中使用*_ERROR
清除它)可能会有效。
如果有人能提出更好的解决方案,我会很高兴。
编辑:当然你可能想听HTTP_STATUS
事件(等待202回答 - 如果我正确理解this documentation)而不是等待COMPLETE
或*_ERROR
。< / p>