我是flex的新手,我正在尝试开发一个应用程序,用于上传多个图像文件以及每个上传的进度条。当我们选择并添加文件时,datagrid保存文件的名称和每个文件的进度条。当文件上传有进展时,它也应该反映在进度条中。我使用filerefencelist来保存文件集合,当我尝试上传文件时,它会生成错误“Null object”
我的代码:
private var initDG : ArrayCollection;
private var _arrUploadFiles:Array = new Array();
private var currentFile:FileReference;
private var currentFileIndex:Number = 0;
private var uploadErrors:Array = new Array();
private var _refAddFiles:FileReferenceList = new FileReferenceList();
// function in called when upload button is clicked
// uploading file to server
private function serverFileupload(event:Event):void
{
if( ! __serverSideScriptURL )
{
Alert.show("Server fileupload URL is missing. Unable to upload.");
return;
}
var request:URLRequest = new URLRequest();
request.url = __serverSideScriptURL;
request.method = URLRequestMethod.POST;
currentFile = new FileReference();
currentFile = _arrUploadFiles[currentFileIndex];
currentFile.addEventListener(IOErrorEvent.IO_ERROR, uploadIoErrorHandler);
currentFile.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler );
currentFile.upload(request, "FileUpload", false);
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
你在哪里填写_arrUploadFiles []?
在上面的代码中,您新建了一个对象,然后覆盖该引用。也许这是你错误的根源。试试这个......
currentFile = new FileReference();
_arrUploadFiles[currentFileIndex] = currentFile;
currentFile.addEventListener(IOErrorEvent.IO_ERROR, uploadIoErrorHandler);
currentFile.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler );
currentFile.upload(request, "FileUpload", false);
我也没有在上面的代码中看到您设置事件处理程序以更新进度条或设置进度条的位置。
也许我偏离轨道,在这种情况下你需要发布更多的代码。
答案 1 :(得分:0)
您的代码中存在一些明显的问题。你应该先解决这些问题。从这里开始:
currentFile = new FileReference();
currentFile = _arrUploadFiles[currentFileIndex];
在这两行中,您创建了一个新的FileReference,然后立即将其丢弃并将其替换为_arrUploadFiles[currentFileIndex]
。此外,如果您粘贴的代码是所有相关代码(似乎不完整),那么您将无法获得您希望的效果,因为_arrUploadFiles[currentFileIndex]
的值将是{{ 1}}(因为在undefined
尚未在该索引处设置任何值)。
一旦解决了一些基本问题,请阅读Flex documentation on FileReference。这些文档中有一些例子你应该仔细研究。请注意_arrUploadFiles
方法如何用于打开文件对话框,允许用户选择应上载哪些文件。在以这种方式填充FileReference之前调用FileReference.browse()
没有意义。