我有一個Flex3應用程序,必須能夠上傳多個文件,並使用標籤而不是進度條監控每個文件的單個進度。Flex 3多重上傳進度監控
我的問題是,上傳的通用進度處理程序沒有辦法(我知道)指示上傳它是否正在進行。我知道一個文件名可以檢查,但在這個應用程序的情況下,文件名可能是相同的多個上傳。
我的問題:使用通用進度處理程序如何區分具有相同文件名的2次多次上傳?
編輯:回答者可能會認爲我是Flex的總新手......因爲我是。
我有一個Flex3應用程序,必須能夠上傳多個文件,並使用標籤而不是進度條監控每個文件的單個進度。Flex 3多重上傳進度監控
我的問題是,上傳的通用進度處理程序沒有辦法(我知道)指示上傳它是否正在進行。我知道一個文件名可以檢查,但在這個應用程序的情況下,文件名可能是相同的多個上傳。
我的問題:使用通用進度處理程序如何區分具有相同文件名的2次多次上傳?
編輯:回答者可能會認爲我是Flex的總新手......因爲我是。
我結束了創建我自己的類管理事件每個上傳文件
如果您正在偵聽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');
我使用此:
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);
...
}
我不確定你想如何區分具有相同名稱的兩個文件。在我的情況下,我發送隊列中的文件。因此,一次只能上傳1個文件。 (pendingFiles)。
感謝Glen,我使用自定義寫入隊列,但是我確實需要能夠一次上傳2+文件,所以問題仍然存在 - 我當前的實現非常相似 – 2009-09-20 23:32:48
無論如何,你需要一些方法來識別它們,所以你甚至可以使用一個數組。然後,當你得到一個fileReference時,你可以說「fileArray.indexOf(fileRef)」來找到它的索引。這將是獨一無二的。或者如果你有文件的鍵,你可以使用一個對象。 – Glenn 2009-09-20 23:48:12
我認爲這已註冊的進度事件的對象是文件的參考?好吧,說我有2個對象 - FileReference和我可以用來跟蹤文件的對象。如何將progressEvent附加到跟蹤對象,以便在文件引用的上載時觸發它?或者我想這是錯誤的方式? – 2009-09-20 21:15:55
我會編輯我的答案,舉一個例子 – Cameron 2009-09-21 23:24:34