FileReference: загрузка файла, заблокированного Windows - PullRequest
7 голосов
/ 08 марта 2010

Я использую 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());
}

1 Ответ

2 голосов
/ 12 марта 2010

Возможный (грязный) обходной путь может состоять в том, чтобы подождать, скажем, 10 секунд, и предположить, что файл недоступен, если ни одно событие не сработало.

Использование setTimeout (и очистка его с помощью clearTimeout в обработчиках событий COMPLETE и *_ERROR) может помочь.

Я буду рад, если кто-то может предложить более приятное решение.


РЕДАКТИРОВАТЬ: Конечно, вы можете прослушать событие HTTP_STATUS (ожидание ответа 202 - если я правильно понял эту документацию ), а не ждать COMPLETE или *_ERROR.

...