Flex 3 отслеживание нескольких загрузок - PullRequest
2 голосов
/ 21 сентября 2009

У меня есть приложение Flex3, которое должно быть способно загружать несколько файлов и следить за каждым прогрессом каждого файла с помощью метки, а НЕ индикатора выполнения.

Моя проблема в том, что универсальный обработчик прогресса для загрузок не имеет (насколько мне известно) способа указать, ЧТО загружает, что происходит. Я знаю, что имя файла доступно для проверки, но в случае этого приложения имя файла может быть одинаковым для нескольких загрузок.

Мой вопрос: с помощью общего обработчика прогресса, как отличить 2 множественные загрузки с одним и тем же именем файла?

РЕДАКТИРОВАТЬ: Ответчики могут предполагать, что я полный новичок в Flex ... потому что я.

Ответы [ 3 ]

1 голос
/ 21 сентября 2009

Я использую это:

  private function _addFileListeners(dispatcher:IEventDispatcher):void {
      dispatcher.addEventListener(Event.OPEN, this._handleFileOpen);
        dispatcher.addEventListener(Event.SELECT, this._handleFileOpen);
        dispatcher.addEventListener(Event.CANCEL, this._handleFileCancel);
        dispatcher.addEventListener(ProgressEvent.PROGRESS, this._handleFileProgress);
        dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,this._handleFileComplete);
        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, this._handleError);
        dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this._handleError);
    }

где "диспетчер" - это файл:

        for (var i:uint = 0; i < fileList.length; i++) {
            file = FileReference(fileList[i]);
            this._addFileListeners(file);
            this._pendingFiles.push(file);
        }

и образец обработчика:

    private function _handleFileOpen(e:Event):void {
        var file:FileReference = FileReference(e.target);
        ...
    }

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

1 голос
/ 21 сентября 2009

Если вы прослушиваете ProgressEvents, у этих событий есть атрибут currentTarget, который будет содержать ссылку на объект, который зарегистрировал прослушиватель событий.

Я предполагаю, что вы знаете, какой объект загрузки файлов идет в первую очередь с каждым объектом.

РЕДАКТИРОВАТЬ: Пример с использованием FileReference:

import flash.net.FileReference;
import flash.events.ProgressEvent;
import flash.utils.Dictionary;

public var files:Dictionary = new Dictionary();     // This will hold all the FileReference objects

public function loadFile(id:String):void
{
    var file:FileReference = new FileReference();

    // Listen for the progress event on this FileReference... will call the same function for every progress event
    file.addEventListener(ProgressEvent.PROGRESS, onProgress);

    // TODO: listen for errors and actually upload a file, etc.

    // Add file to the dictionary (as key), with value set to an object containing the id
    files[file] = { 'id': id };
}

public function onProgress(event:ProgressEvent):void
{
    // Determine which FileReference dispatched thi progress event:
    var file:FileReference = FileReference(event.target);

    // Get the ID of the FileReference which dispatched this function:
    var id:String = files[file].id;

    // Determine the current progress for this file (in percent):
    var progress:Number = event.bytesLoaded / event.bytesTotal;

    trace('File "' + id + '" is ' + progress + '% done uploading');
}


// Load some files:
loadFile('the first file');
loadFile('the second file');
0 голосов
/ 26 марта 2010

Я закончил тем, что создал свой собственный класс, который управляет событиями для каждого загружаемого файла

...