首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex: FileReference的DeepCopy

Flex: FileReference的DeepCopy
EN

Stack Overflow用户
提问于 2010-01-04 00:02:52
回答 4查看 2.1K关注 0票数 6

在我的项目中,我让用户使用FileReference类来选择图片。然后我使用load()函数将这些图片加载到它们的.data属性中。在此之后,我执行一些本地操作,并将它们发送到服务器。

我想要做的是,能够再次迭代所挑选的FileReferences,将它们加载到.data属性中,执行不同的操作,并再次将它们发送到服务器。我知道我应该能够从用户调用的事件中做到这一点,这在这里不是问题。

问题是,一旦FileReference第一次加载,我就不能以任何方式卸载它,我也不能将所有图片的数据保存在内存中,因为这些图片太大了。

所以我想我能做的只有一件事,那就是在FileReference上执行DeepCopy……然后,我可以加载第一个版本,将其销毁,然后使用副本进行第二次“运行”。

我尝试使用ObjectUtil.copy,但当我访问副本的.name属性时,它失败了,并显示以下信息:

代码语言:javascript
复制
Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

在flash.net::FileReference/get name()

相关的代码片段:

代码语言:javascript
复制
registerClassAlias("FileReference",FileReference);
masterFileList.addItem(FileReference(ObjectUtil.copy(fr_load.fileList[i])));
trace(masterFileList[i].name)

FileReference类有一些受保护的属性阻止它被复制,这是真的吗?如果是这样的话,我能以某种方式回避这个问题吗?或者,对于我的整体问题,还有其他解决方案吗?

我很感谢任何提示/想法!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-21 02:45:31

我试着做几乎和你一样的事情,在读完一些答案后,我几乎放弃了,但我想我找到了一种方法。我发现,如果您有一个FileReference对象并多次调用load(),它将会工作,但主要问题是您在第一次加载后会将高分辨率字节保留在内存中。正如您所提到的,对于不了解图像处理的人来说,这是一个很大的禁忌。

解决这个问题的方法是,在第一个load()之后,需要调用FileReference上的cancel()方法。到目前为止,从我的测试来看,这看起来会清除FileReference中的字节,如果您稍后再次调用load(),它仍然可以工作。需要注意的是,这不是API中显式定义的行为,因此它肯定会发生变化,但它可能会帮助您实现所需的目标。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-01-11 21:41:31

你不能使用ObjectUtil.copy。此方法仅用于复制数据对象(VO类)。

您应该创建一个新的FileReference并逐个复制属性。创建一个函数来执行此操作。

票数 1
EN

Stack Overflow用户

发布于 2010-01-13 13:10:01

将其复制到临时文件,然后上载临时文件是否可行?例如

代码语言:javascript
复制
        var fileRef:FileReference = new FileReference();
        fileRef.browse();

        ......................

        var tmpFile:File =  File.createTempFile();
        try {
            var tmpFileStream:FileStream = new FileStream();
            tmpFileStream.open(tmpFile, FileMode.WRITE);
            trace("Opened file: " + tmpFile.nativePath);
            tmpFileStream.writeBytes(fileRef.data);
            trace("copied file");
        } catch ( error:Error ) {
            trace("Unable to open file " + tmpFile.nativePath + "\n");
            throw error;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1995396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档