是否可以在后台将文件转换为FileReference?

时间:2012-02-12 04:35:04

标签: flash actionscript-3 file air filereference

看起来FileReference.upload()是您可以将文件上传到Flash中的服务器并通过PROGRESS回调获取有关其上传状态的反馈的唯一方法。所有其他方法只是进入以太,并在文件上传完成后返回。

不幸的是,FileReference似乎坚持要求用户选择要上传的文件。似乎没有一种机制可以通过代码设置文件。我需要这个的原因是我允许用户上传大量文件并将其上传到块中,因此,我想将一大块数据打包到FileReference(可能是5或10兆)中并将其发送出去看着它。有没有人想过是否可以手动将数据加载到FileReference对象中?遗憾的是,data属性是只读的。任何和所有关于此的建议都将得到善意的对待:)

2 个答案:

答案 0 :(得分:1)

海报不是试图从用户系统上传随机文件,而是试图获取文件引用来上传自定义数据 - 遗憾的是它不能。

我发现此链接非常有用: http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

答案 1 :(得分:0)

是的,这不应该是可能的,这是一种安全措施。即如果用户没有明确选择要发送的文件,你就不应该从用户的PC上发送随机文件。

但是,如果您以不同方式进行设计,则可以监控上传。例如,您可以使用URLStream或Socket或NetConnection发送所需的任何数据,并将服务器配置为以您需要的方式响应。例如,URLStream提供可用于发送和接收数据的读/写流。然后,您可以使用某种缓冲区:发送缓冲区的内容,等待服务器确认收到的数据,重新填充缓冲区,重复。

编辑:所以我猜我们正在讨论AIR应用程序(因为你提到了文件)?所以,您可能正在使用FileStream打开一个文件,并希望通过使用FileReference.upload()发送您刚刚收到的一大块数据 - 这是正确的吗?那么,似乎FileReference无法默默地执行它。不过,我会使用URLStream来分割你要上传的大块数据,例如100个部分,然后在从配置为接受它的服务器脚本接收OK后发送每个部分。通常,文件上传由HTTP服务器直接处理,但是您的情况需要一些额外的工作,即启动一个协商“包”大小的脚本,接收包并确认接收。对于可能超时的服务器脚本来说,这可能不那么重要,但肯定必须有解决方案。

或者,您可以将HTTP服务器配置为在收到套接字策略请求后提供套接字策略,之后,您可以连接Socket并只复制通常通过FileReference或类似HTML发送的multipart-form-data类型的请求控制。 (我可能会选择这种方式,如果它不是共享主机或其他任何阻止我能够配置服务器的东西)。