用flex发送图片数据至服务器

来源:互联网 发布:json接口测试工具 编辑:程序博客网 时间:2024/05/17 15:05

我们知道Flex对于本地的限制比AIR要大,当我们想保存一个由Flex生成的文件必须借由服务器来完成,现在有一个需求就是,用户想保存Flex生成的图片在本地,我们要完成这个过程,必须先将Flex生成的图片转换为通用的数据格式,即ByteArray,然后由后台程序帮助写文件,形式上类似先上传,再下载,只不过中间不用保存实际的物理文件。

好了废话这么多把代码贴上来吧

Flex端

[复制到剪贴板]

CODE:

:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>

<![CDATA[

import mx.graphics.codec.JPEGEncoder;

import mx.graphics.ImageSnapshot;

private function saveAs(){

var en:JPEGEncoder = new JPEGEncoder(100); //压缩图片,100是指质量

var ba:ByteArray=en.encode(ImageSnapshot.captureBitmapData(img));//将控件转为BitmapData后再转为ByteArray

var request:URLRequest = new URLRequest("/TestForLCDS/servlet/UploadServlet");

request.method="POST";

request.data=ba;

request.contentType = "application/octet-stream"; //这个很重要,设置成流数据

navigateToURL(request,"_blank"); //因为要浏览器触发下载事件,所以就不用异步方式打开连接了

}

]]>

</mx:Script>

<mx:Button x="228" y="10" label="另存为本地图片" click="saveAs()"/>

<mx:Image id="img" x="10" y="10" source="img.jpg" width="200" height="200" scaleContent="false"/>

</mx:Application>

后台Java servlet

[复制到剪贴板]

CODE:

:

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("application/x-download"); //内容是下载

response.setHeader("Content-Disposition","attachment;filename=" + "test.jpg");//文件名,可以进一步处理

//读数据

BufferedInputStream inputStream = new BufferedInputStream(request.getInputStream());

OutputStream outputStream = response.getOutputStream();

byte [] bytes = new byte[1024];

int v;

//写数据

while((v=inputStream.read(bytes))>0){

outputStream.write(bytes,0,v);

}

outputStream.flush();

outputStream.close();

inputStream.close();

}

}

原创粉丝点击