FileReference.load () не так, как исключено - PullRequest
0 голосов
/ 26 декабря 2009

Я использовал 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 ]

2 голосов
/ 12 октября 2010

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

1 голос
/ 25 марта 2010

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

0 голосов
/ 27 декабря 2009

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

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

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

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

...