通过FileReference刚刚加载的文件的文件名不可用

时间:2009-11-10 18:26:07

标签: flex

要将3个文件本地加载到Flash Player中,可以使用此类文件在用户选择文件后管理序列...

    private function uploadList(evt:Event):void{

        var arr:Array = fileReferenceList.fileList;

        for each(var item:FileReference in arr){
            item.addEventListener(Event.COMPLETE, onFileLoadComplete);
            item.load();
        }

    }

//第2步 - 继续加载文件并等待第3步...在这个用例中将调用三次。

    private function onFileLoadComplete(e:Event):void {

        var loader:Loader = new Loader();

        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete);
        loader.loadBytes(FileReference(e.target).data);
    }

//第3步 - Flash Player已加载文件并准备好处理... //这个例子是一个填充到BitmapData对象中的图像......

private function onDataLoadComplete(e:Event):void {
        var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData;
        var loader:Loader = Loader(e.target.loader);

...

}

//步骤4 - 通过步骤3的每个文件的文件名和文件字节大小在哪里?

我无法在现有对象中找到此数据。

我自己的决议......

我将信息填入一个简单的字典并稍后检索。

也许还有其他解决方案?

private function onFileLoadComplete(e:Event):void {

        if(FileReference(e.target).data.length == 0){
            return;
        }           

        var loader:Loader = new Loader();
        filenameDict[loader] = String(FileReference(e.target).name);

        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete);
        loader.loadBytes(FileReference(e.target).data);
    }


    private function onDataLoadComplete(e:Event):void {
        var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData;

        var loader:Loader = Loader(e.target.loader);
        var file:String = filenameDict[loader];
        delete filenameDict[loader];

1 个答案:

答案 0 :(得分:0)

您可以使用数组进行操作,但从代码中可以看出,Dictionary是更简单的方法。

var files:Array = [];
var loaders:Array = [];
private function onFileLoadComplete(e:Event):void 
{
  var loader:Loader = new Loader();
  files.push(e.target);
  loaders.push(loader);
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDataLoadComplete);
  loader.loadBytes(FileReference(e.target).data);
}
private function onDataLoadComplete(e:Event):void
{
  var bitmapData:BitmapData = Bitmap(e.target.content).bitmapData;
  var loader:Loader = Loader(e.target.loader);
  var index:Number = loaders.indexOf(loader);
  var file:String = FileReference(files[index]).name;
  /*
   * Clear the arrays to get rid of unwanted references that might 
   * prevent them from being garbage collected.
   * */
  files.splice(index);
  loaders.splice(index);
}

当我发布这篇文章的第一个版本时,我对FP10的FileReference一无所知。