ActionScript 上传大体积数据 (ByteArray)
在使用Flash上传Bytearray或者使用FileReference类上传文件
现在的上传方式有Socket, HTTP, RTMP(FMS 4.0以上)等
以上方法各有优缺点, 以HTTP为例, 另外两种方法以后再总结和介绍
Flash自带的FileReference是使用HTML的POST来上传的, 当使用HTTP传输Bytearray的时候
也可以使用HTML的POST方法来上传, 这个时候可以使用MultipartURLLoader这个包
通过构造HTML表单数据实现POST上传
一般以流的形式来上传到服务器, 这种上传方法在客户端与服务器之间的连接性以及客户端和服务器自己之间
的带宽相性都比较好而且文件不大的时候很有优势, 速度也很理想, 但是只要其中某一个条件不是很好的话就会出问题,
带来的结果就是
有可能会出现文件已经上传到服务器, 但是依然返回没有上传成功的状态码, 或者是根本就没有上传成功(IO Error 2032 2038...)
在网上搜了一些资料, 大致原因分析如下:
大致意思就是说大文件或者带宽环境不好的时候, 服务器和客户端之间的长连接的时间长, 文件的大小和服务器开辟的临时的内存空间大小一致
如果一直没上传完成, 连接就会一直存在, 从而增加了服务器的负担而且会带来连接的不稳定.
另外经过实验观察发现, 小文件传输的成功率比较高(100KB左右), 因此决定采用客户端分割文件, 实现分段串行上传到服务器, 服务器再拼接上传的文件
这样的好处是, 即使是出现了一小段上传不成功的现象, 也可以重新建立连接重传这一小块, 之前传输的小段文件已经存储在服务器不会改变
每一次传输都会和服务器建立一个短连接(每一小块文件较小), 上传完毕就会自动释放这一小块连接, 保证了服务器的负载较小和传输的可靠性
坏处就是, 由于每一小块就要创立连接, 增加了通信的时间, 从而增加了上传的时间
综上, Flash使用HTTP上传大数据时, 前端分段上传数据后端拼接数据是一个比较可靠的选择
使用这样的方法不能上传到AWS, 因为AWS不提供复杂的脚本执行功能, 即使每一块都上传到了AWS也没办法合成
具体的Demo会在稍后放出。。。AWS的上传之后会单独介绍