FileReference.load() не так, как исключено

Я использовал Flash Player 10 и Flex SDK 3.4. Код как следует:

// Following comes callbacks
function imageLoadOpenCallback(evt:Event):void
{
    trace("in--open");
}

function imageLoadCompleteCallback(evt:Event):void
{
    trace("in--load");
    var fr:FileReference = evt.target as FileReference;
    trace(fr.data);
}

function imageLoadErrorCallback(evt:IOErrorEvent):void
{
    trace("in--ioerror");
}

function imageSelectCancelCallback(evt:Event):void
{
    trace("in cancel");
}

function imageSelectCallback(evt:Event):void
{
    trace("in -- select");
    for (var i:int=0; i<frl.fileList.length; i++)
    {

        frl.fileList[i].addEventListener(Event.OPEN, imageLoadOpenCallback);
        frl.fileList[i].addEventListener(Event.COMPLETE, imageLoadCompleteCallback);
        frl.fileList[i].addEventListener(IOErrorEvent.IO_ERROR, imageLoadErrorCallback);
        frl.fileList[i].load();
        trace(frl.fileList[i]);
        trace(frl.fileList[i].creationDate);
        trace(frl.fileList[i].creator);
        trace(frl.fileList[i].data);
        trace(frl.fileList[i].name);
    }   
}


// Following comes UI handlers
function onAddPictures():void
{
    var imageFilter:FileFilter = new FileFilter("Images", "*.jpg;*.png");
    frl.addEventListener(Event.SELECT, imageSelectCallback);
    frl.addEventListener(Event.CANCEL, imageSelectCancelCallback);
    frl.browse([imageFilter]);
}

При выборе некоторых файлов в диалоговом окне вызывается только обработчик imageSelectCancelCallback. Но никакой обработчик load/open/io_error не вызывается вообще. У меня есть Google пример кода, в котором он использует FileReference вместо FileReferenceList. Я не знаю причину, не могли бы вы мне помочь?

3 ответа

В эфире fileReference объекты в fileReferenceList не запускайте полное событие при выполнении fileList[i].load(), В проекте Flex это работает отлично. Adobe не ответила на сообщения об ошибках по этому вопросу.

Убедитесь, что в настройках компилятора для flex у вас есть по крайней мере 10.0.0 для "Использовать определенную версию".

Основная причина использования FileReferenceList вместо FileReference будет, если вам нужно загрузить несколько файлов одновременно. Если вы хотите разрешить загрузку только одного файла, просто используйте FileReference,

Некоторые уточнения: imageSelectCallback(), и не imageSelectCancelCallback(), должен вызываться при выборе некоторых файлов в файловом браузере и нажатии ОК. imageSelectCancelCallback() вызывается только при нажатии кнопки Отмена.

Кроме этого, я никогда не использовал load() API, но я использовал upload(URLRequest) API. Я не уверен, что вы используете, но если вам нужно загрузить изображение на сервер, вы должны использовать upload() метод.

Говоря о событиях загрузки, у меня возникли некоторые проблемы с надежностью при прослушивании Event.COMPLETE события, так что я на самом деле получил лучшие результаты, слушая DataEvent.UPLOAD_COMPLETE_DATA,

Другие вопросы по тегам