我有一个Flex3应用程序,它必须能够上传多个文件,并使用标签而不是进度条监控每个文件的个别进度。
我的问题是,上传的通用进度处理程序无法(我知道)指示正在进行的上传。我知道可以检查文件名,但对于这个应用程序,多个上传文件名可能相同。
我的问题:使用通用进度处理程序,如何区分具有相同文件名的2个多个上传文件?
编辑:回答者可能会认为我是Flex的全新内容......因为我是。
答案 0 :(得分:1)
如果您正在侦听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');
答案 1 :(得分:1)
我用这个:
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);
}
其中“dispatcher”是文件:
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)。
答案 2 :(得分:0)
我最终创建了自己的类来管理每个上传文件的事件