加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 使用URLStream读取服务器端图片文件流并显示

发布时间:2020-12-15 01:01:58 所属栏目:百科 来源:网络整理
导读:? ?在flex中显示服务器端的图片可以使用Image控件的source属性,但是这个条件必须是客户端可以访问到的有效的URL地址。如果图片存储在数据库中,直接使用source属性是无法显示图片的。这种情况下可以使用flex中的URLStream类来读取文件流,然后把文件显示到
?

?在flex中显示服务器端的图片可以使用Image控件的source属性,但是这个条件必须是客户端可以访问到的有效的URL地址。如果图片存储在数据库中,直接使用source属性是无法显示图片的。这种情况下可以使用flex中的URLStream类来读取文件流,然后把文件显示到画面上。
第一步,创建一个URLStream对象,然后调用这个对象的load函数从服务器端读取图片文件的内容。

view plain copy to clipboard print ?
  1. private?var?stream:URLStream?=?new?URLStream();??
  2. private?function?onShow():void??
  3. {??
  4. ????var?downLoadURL:URLRequest?=?new?URLRequest();??
  5. ????downLoadURL.url?=?"http://localhost:8080/LoadPicture/download";??
  6. ????stream.addEventListener(Event.COMPLETE,?onLoadComplete);??
  7. ????stream.load(downLoadURL);??
  8. }??

第二步,把文件的内容保存到ByteArray中。在第一步中,为URLStream对象的COMPLETE事件注册了监听函数onLoadComplete,在这个函数中把得到的文件内容把文件的内容保存到ByteArray中。

view plain copy to clipboard print ?
  1. private?var?stream:URLStream?=?new?URLStream();??
  2. private?function?onLoadComplete(event:Event):void??
  3. {??
  4. ????if?(stream.connected)??
  5. ????{??
  6. ????????var?b:int;??
  7. ????????try?{??
  8. ????????????do?{??
  9. ????????????????b?=?stream.readByte();??
  10. ????????????????bytes.writeByte(b);??
  11. ????????????}?while?(true);??
  12. ????????}?catch?(e:EOFError)?{??
  13. ????????????Alert.show(bytes.length.toString());??
  14. ????????}??
  15. ????}??
  16. ????var?bmp:Loader?=?new?Loader();??
  17. ????bmp.loadBytes(bytes);??
  18. ????pic.addChild(bmp);??
  19. }??

在取文件内容的时候,可以一个字节一个字节的取,当去到文件流的末尾时会抛出EOFError。
第三步,取到了文件内容之后就是把图片显示到画面上了,这里需要用到Loader类。使用Loader类的loadBytes函数,把图片内容放到Loader对象中,然后把Loader对象加到Image控件中就可以了。

服务器端的工作:
服务器端必须把图片文件准备还,然后在客户端请求数据的时候把文件流输出到客户端就可以了。

下面的例子是个java实现的。

view plain copy to clipboard print ?
  1. private?void?downLoad(HttpServletResponse?response)?throws?Exception?{??
  2. ??
  3. ????BufferedOutputStream?bos?=?null;??
  4. ????BufferedInputStream??bis?=?null;??
  5. ????try?{??
  6. ????????bis?=?new?BufferedInputStream(new?FileInputStream("c:/head.PNG"));????????????
  7. ????????bos?=?new?BufferedOutputStream(response.getOutputStream());??
  8. ??????????
  9. ????????byte[]?buff?=?new?byte[2048];??
  10. ????????int?bytesRead;??
  11. ??
  12. ????????while(-1?!=?(bytesRead?=?bis.read(buff,?0,?buff.length)))?{??
  13. ????????bos.write(buff,0,bytesRead);??
  14. ????????}??
  15. ????}?catch(final?IOException?e)?{??
  16. ????????e.printStackTrace();??
  17. ????}?catch(Exception?e)?{??
  18. ????????e.printStackTrace();??
  19. ????}finally?{??
  20. ????????if?(bis?!=?null)??
  21. ????????bis.close();??
  22. ????????if?(bos?!=?null)??
  23. ????????{??
  24. ????????bos.flush();??
  25. ????????bos.close();??
  26. ????????bos=null;??
  27. ????????}??
  28. ????}??
  29. ????response.flushBuffer();??
  30. }??

?

完整例子下载地址:

http://download.csdn.net/source/1815371

?

提示:使用本例的时候需要在c:/放置一个文件名为“head.PNG”的图片。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读