最近用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);


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐