FileReference.upload()似乎是您在Flash中将文件上传到服务器并通过PROGRESS回调获得上传状态反馈的唯一方法。所有其他方法都会进入以太网络,并在文件上传完成后返回。
不幸的是,FileReference似乎坚持要求用户选择要上传的文件。似乎没有通过代码设置文件的机制。我需要这一点的原因是,我允许用户上传大量文件,并将其分块上传,所以,我只想将一块数据打包到FileReference(可能是5或10兆)中,然后发送出去,看着它继续。有人想过是否可以手动将数据加载到FileReference对象中吗?遗憾的是,数据属性是只读的。任何关于这方面的建议都将受到善意的对待:)
海报并没有试图从用户系统上传随机文件,而是试图获得文件引用来上传自定义数据——不幸的是,它无法做到这一点。
我发现这个链接非常有用:http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/
是的,这不可能,这是一种安全措施。也就是说,如果用户没有明确选择要发送的文件,你就不能从用户的电脑发送随机文件。
但是,如果您的设计不同,您可以监控上传。例如,您可以使用URLStream、Socket或NetConnection来发送您想要的任何数据,并配置服务器以您需要的方式进行响应。例如,URLStream提供了一个读/写流,您可以使用它来发送和接收数据。然后,您可以将其与某种缓冲区一起使用:发送缓冲区的内容,等待服务器确认收到数据,重新填充缓冲区,重复。
编辑:所以我猜我们谈论的是AIR应用程序(既然你提到了File)?因此,您可能正在使用FileStream打开一个文件,并希望使用FileReference.upload()发送刚刚收到的一大块数据,这是正确的吗?好吧,那么FileReference似乎不能默默地完成它。尽管如此,我还是会使用URLStream将您想要上传的大块数据拆分为100个部分,然后在收到配置为接受它的服务器脚本的OK后发送每个部分。通常,文件上传是由HTTP服务器直接处理的,但您的情况需要一些额外的工作,即启动一个协商"包"大小的脚本,接收包裹并确认接收。对于可能超时的服务器脚本来说,这可能不那么微不足道,但肯定有解决方案。
或者,您可以将HTTP服务器配置为在收到套接字策略请求后提供套接字策略,然后,您可以连接套接字,只复制通常通过FileReference或类似HTML控件发送的多部分表单数据类型的请求。(如果不是共享主机或其他任何会阻止我配置服务器的东西,我可能会选择这种方式)。