日期:2014-05-16  浏览次数:20428 次

web如何接收服务器发送的数据流并生成文件
我们这个项目是这样的 。

http发一个长连接,服务器接到命令后不断向浏览器端推送图片数据流,然后再用ajax不断替换图片以达到像视频一样播放的效果(不想用ActiveX控件)。服务器端向浏览器端发送的数据是用C做的。

现在我纠结的是我怎么获取这些数据流,并把这些数据流生成一个图片文件!!



用抓包工具抓到是数据流大概如下:
HTTP Code: 200 ok 
Content-Type: multipart/x-mixed-replace; boundary=1329898486 
--1329898486 
Content-Type: image/jpeg 
Content-Length: 12233
……
……

------解决方案--------------------
xmlhttprequest对象有的redyState有一个状态是3,表明已经开始接收数据了,只要是http一直keep-alive的,就会不断的接收数据,可以获取responseText来查看数据,以前我用这方式加载过base64编码的图片,效率还是可以的。
------解决方案--------------------
你可以看看HTTP协议,分析boundary,找到后面的1329898486 位置 获得数据,
------解决方案--------------------
不知道你们具体的需求是什么样的,为什么要来回返回图片,是为了生成动态图表
还是其他的,如果是那样的话,这个设计就太蠢了。

就算是你必须要返回图片这个设计也依然很蠢。长连接都用上了,居然返回这么复杂
一个报文,多个图片的数据被压缩在一个请求中返回了,需要前端自己分析二进制代码
然后截取出一张张的图片。先不说JS对二进制操作是是否擅长,就是能操作,浏览器
能承受这样的计算量吗?快点的浏览器还好说,IE6呢?就算这些也解决了客户端怎么
根据这些二进制显示出图片来,现代浏览器支持html5好说一点,把这些数据转化为
base64编码以data协议显示出来,IE6 IE7这些不支持Data协议的浏览器呢?

如果必须要实现,感觉有两个路子可以走:
1. 使用Flash处理这些数据。Flash处理图像而二进制的能力要比JS方便很多,效率也更高

2. 改成下服务器返回的数据让长连接返回这样的数据结构
JScript code

   <script>
   try{
        if(parent.showPic){
            parent.showPic('image/jpeg', '<图片Base64编码>');
        }
   }catch(e){}
   </script>