2010年12月12日星期日

flex中将图片保存成xml文件存入本地(转)

我们知道Flex对于本地的限制比AIR要大,当我们想保存一个由Flex生成的文件必须借由服务器来完成,现在有一个需求就是,用户想保存Flex生成 的图片在本地,我们要完成这个过程,必须先将Flex生成的图片转换为通用的数据格式,即ByteArray,然后由后台程序帮助写文件,形式上类似先上 传,再下载,只不过中间不用保存实际的物理文件。
源码的编辑:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
  3. <mx:Script>
  4. <![CDATA[
  5. import mx.graphics.codec.JPEGEncoder;
  6. import mx.graphics.ImageSnapshot;
  7. private function saveAs(){
  8. var en:JPEGEncoder = new JPEGEncoder(100); //压缩图片,100是指质量
  9. var ba:ByteArray=en.encode(ImageSnapshot.captureBitmapData(img));//将控件转为BitmapData后再转为ByteArray
  10. var request:URLRequest = new URLRequest("/TestForLCDS/servlet/UploadServlet");
  11. request.method="POST";
  12. request.data=ba;
  13. request.contentType = "application/octet-stream"; //这个很重要,设置成流数据
  14. navigateToURL(request,"_blank"); //因为要浏览器触发下载事件,所以就不用异步方式打开连接了
  15. }
  16. ]]>
  17. </mx:Script>
  18. <mx:Button x="228" y="10" label="另存为本地图片" click="saveAs()"/>
  19. <mx:Image id="img" x="10" y="10" source="img.jpg" width="200" height="200" scaleContent="false"/>
  20. </mx:Application>

后台java
  1. public void doPost(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {

  3. response.setContentType("application/x-download"); //内容是下载
  4. response.setHeader("Content-Disposition","attachment;filename=" + "test.jpg");//文件名,可以进一步处理
  5. //读数据
  6. BufferedInputStream inputStream = new BufferedInputStream(request.getInputStream());
  7. OutputStream outputStream = response.getOutputStream();
  8. byte [] bytes = new byte[1024];
  9. int v;
  10. //写数据
  11. while((v=inputStream.read(bytes))>0){
  12. outputStream.write(bytes,0,v);
  13. }
  14. outputStream.flush();
  15. outputStream.close();
  16. inputStream.close();
  17. }

  18. }
摘自:http://www.eb163.com/club/forum.php?mod=viewthread&tid=4165&page=1

没有评论: