最近用flex写了一个在线拍照的功能,一切都进展的比较顺利,最后完成了将工具放到项目中使用,发现不能使用,经过查看才发现是因为我最后传递的图片数据是一个ByteArray
对象,然后虽然使用了multipart-formdata这种方式来做为头信息,但是发现不行,因为servlet容器在处理http头信息时发现你是上传的文件,他就会做相应的转换,具体做什么转换不清楚,总的来说就是,如果你的数据不符合multipart-formdata的话,容器就会把你“挡在门外”,如果要正确的接收前台的数据有两种方式
一、直接以字节流的方式传递,也就是说将头信息设置为如request.contentType = "application/octet-stream";形式
然后在服务器端直接读取这些数据
二、将数据的格式转化为符合multipart-formdata的形式,我在网上找到了一个人写的工具类,可以很方便的将数据转化为这种形式
具体做法很简单,贴点重要代码做参考
var url:String="http://www.test.com/upload/UploadAction.action";//上传地址自己根据实际情况定
var request:URLRequest=new URLRequest(url);
//form表单提交,同时声明分隔符boundary
request.contentType="multipart/form-data; boundary="+UploadPostHelper.getBoundary();
request.requestHeaders.push(new URLRequestHeader( 'Cache-Control', 'no-cache'));
request.method=URLRequestMethod.POST;
//设置上传文件名和上传数据
//getPostData()方法主要是根据RFC1867来处理数据
request.data=UploadPostHelper.getPostData(fileName, data, parameters);