0

我使用了 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 处理程序。我有谷歌一些代码示例,其中使用 FileReference 而不是 FileReferenceList。不知道是什么原因,能帮帮我吗?

4

3 回答 3

2

在 Air 中的fileReference对象在fileReferenceList执行时不会触发 complete 事件fileList[i].load()。在 Flex 项目中它工作正常。Adobe 尚未适当回应有关此问题的错误报告。

于 2010-10-12T02:57:57.377 回答
1

确保在您的 flex 编译器设置中,“使用特定版本”至少有 10.0.0。

于 2010-03-24T21:40:36.883 回答
0

FileReferenceList使用而不是的主要原因FileReference是如果您需要一次上传多个文件。如果您只想允许一次上传一个文件,只需使用FileReference.

一些说明:当您在文件浏览器中选择一些文件并单击确定时,应该调用imageSelectCallback()和 NOT 。仅在单击取消时调用。imageSelectCancelCallback()imageSelectCancelCallback()

除此之外,我从未使用过load()API,但我确实使用过upload(URLRequest)API。我不确定您的用例是什么,但是如果您需要将图像上传到服务器,则应该使用该upload()方法。

说到上传事件,我在监听事件时遇到了一些可靠性问题Event.COMPLETE,所以实际上我在监听DataEvent.UPLOAD_COMPLETE_DATA.

于 2009-12-27T09:27:40.963 回答