actionscript里面如何上传文件到服务端?
来源:互联网 发布:网络首先是一种? 编辑:程序博客网 时间:2024/05/21 21:50
前言
最近看回以前的浮士德增强修改版,发现以前的图片上传方式不是规范,所以这里又拿了网上的一份代码改成了可以上传文件的形式。想要浮士德头像裁剪增强版源代码的话,后面会给出来的。
工具类
package easis.common{ import flash.events.*; import flash.net.*; import flash.utils.ByteArray; import flash.utils.Endian; /** * Take a fileName, byteArray, and parameters object as input and return ByteArray post data suitable for a UrlRequest as output * * @see http://marstonstudio.com/?p=36 * @see http://www.w3.org/TR/html4/interact/forms.html * @see http://www.jooce.com/blog/?p=143 * @see http://www.jooce.com/blog/wp%2Dcontent/uploads/2007/06/uploadFile.txt * @see http://blog.je2050.de/2006/05/01/save-bytearray-to-file-with-php/ * * @author Jonathan Marston * @version 2007.08.19 * * This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 3.0 License. * @see http://creativecommons.org/licenses/by-nc-sa/3.0/ * */ public class UploadPostHelper2{ /** * Boundary used to break up different parts of the http POST body */ private static var _boundary:String = ""; /** * Get the boundary for the post. * Must be passed as part of the contentType of the UrlRequest */ public static function getBoundary():String { if(_boundary.length == 0) { for (var i:int = 0; i < 0x20; i++ ) { _boundary += String.fromCharCode( int( 97 + Math.random() * 25 ) ); } } return _boundary; }// //要上传的图片// var one4data:Bitmap= model.scanvo.currentScanImage;// //图片转换成字符数组// //对传送数据编码(很重要)// var data:ByteArray=new JPGEncoder().encode(one4data.bitmapData); // // 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("test.jpg",data ); private var _req:URLRequest; private var _parameters={}; private var _fileMap:Array=[]; public function UploadPostHelper2(url:String){ _req=new URLRequest(url); //form表单提交,同时声明分隔符boundary _req.contentType="multipart/form-data; boundary="+UploadPostHelper2.getBoundary(); _req.requestHeaders.push(new URLRequestHeader( 'Cache-Control', 'no-cache')); _req.method=URLRequestMethod.POST; } /*** * 添加参数进去。 * ***/ public function addParameter(key:String,value:String){ _parameters[key]=value; } /**** * 添加文件内容进去。 * ***/ public function addFile(fileName:String,uploadFieldName:String,fileContent:ByteArray){ this._fileMap.push({ fileName:fileName ,fieldName:uploadFieldName ,content:fileContent }); } /*** * 设定request的主体部分。 * ***/ private function setReqData(){ var i: int; var bytes:String; var postData:ByteArray = new ByteArray(); //更改或读取数据的字节顺序 postData.endian = Endian.BIG_ENDIAN; //add Filename to parameters if(this._parameters== null) { this._parameters = new Object(); } //遍历parameters中的属性 //add parameters to postData for(var name:String in this._parameters) { postData = BOUNDARY(postData); postData = LINEBREAK(postData); bytes = 'Content-Disposition: form-data; name="' + name + '"'; for ( i = 0; i < bytes.length; i++ ) { postData.writeByte( bytes.charCodeAt(i) ); } postData = LINEBREAK(postData); postData = LINEBREAK(postData); postData.writeUTFBytes(this._parameters[name]); postData = LINEBREAK(postData); } for(var j=0;j< this._fileMap.length;j++){ var fileItem=this._fileMap[j]; var uploadDataFieldName=fileItem.fieldName; var fileName=fileItem.fileName; var fileContent=fileItem.content; //add Filedata to postData postData = BOUNDARY(postData); postData = LINEBREAK(postData); bytes = 'Content-Disposition: form-data; name="'+uploadDataFieldName+'"; filename="'; for ( i = 0; i < bytes.length; i++ ) { postData.writeByte( bytes.charCodeAt(i) ); } postData.writeUTFBytes(fileName); postData = QUOTATIONMARK(postData); postData = LINEBREAK(postData); bytes = 'Content-Type: application/octet-stream'; for ( i = 0; i < bytes.length; i++ ) { postData.writeByte( bytes.charCodeAt(i) ); } postData = LINEBREAK(postData); postData = LINEBREAK(postData); postData.writeBytes(fileContent, 0, fileContent.length); postData = LINEBREAK(postData); } //closing boundary postData = BOUNDARY(postData); postData = DOUBLEDASH(postData); _req.data=postData; } public function getUrlRequest():URLRequest { this.setReqData(); return this._req; } /** * Add a boundary to the PostData with leading doubledash 添加以双破折号开始的分隔符 */ private static function BOUNDARY(p:ByteArray):ByteArray { var l:int = UploadPostHelper2.getBoundary().length; p = DOUBLEDASH(p); for (var i:int = 0; i < l; i++ ) { p.writeByte( _boundary.charCodeAt( i ) ); } return p; } /** * Add one linebreak 添加空白行 */ private static function LINEBREAK(p:ByteArray):ByteArray { p.writeShort(0x0d0a); return p; } /** * Add quotation mark 添加引号 */ private static function QUOTATIONMARK(p:ByteArray):ByteArray { p.writeByte(0x22); return p; } /** * Add Double Dash 添加双破折号-- */ private static function DOUBLEDASH(p:ByteArray):ByteArray { p.writeShort(0x2d2d); return p; } }}
使用方式
//生成编码容器 var jpgEncoder:JPGEncoder = new JPGEncoder(100); //将位图数据编码到容器内成为ByteArray流 //var jpgStream:ByteArray = jpgEncoder.encode(_srcBmd); var jpgStream = new ByteArray(); jpgStream.writeBytes(jpgEncoder.encode(_newBmd)); var jpgSrcStream=new ByteArray(); jpgSrcStream.writeBytes(jpgEncoder.encode(_srcBmd)); var uploadPostHelper=new UploadPostHelper2(_uploadUrl); uploadPostHelper.addFile("thumb.jpg",Param.imageUploadKey,jpgStream); if(Param.uploadSrc){ uploadPostHelper.addFile("src.jpg",Param.imageSrcUploadKey,jpgSrcStream); } var jpgURLRequest:URLRequest = uploadPostHelper.getUrlRequest(); var loader:URLLoader = new URLLoader(); //loader.addEventListener(Event.COMPLETE, this.uploadComplete); loader.addEventListener(Event.COMPLETE, this.uploadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, this.errorHandler); loader.load(jpgURLRequest);
0 0
- actionscript里面如何上传文件到服务端?
- c#上传文件到服务端
- 服务端签名后上传文件到oss
- 客户端上传到服务端图片,服务端把图片保存到指定的文件中
- flex上传文件到服务端(python脚本)
- Tcp从Socket客户端上传文件到ServerSocket服务端
- Android 上传文件到服务端,并显示进度条
- 使用FormData来提交表单同时上传文件到服务端
- 服务端文件上传测试
- 文件上传 服务端代码
- 如何在服务端保存用户上传的图片文件
- post上传视频文件到服务端
- TCP 上传图片到服务端
- flex actionscript读取外部 (服务端) XML文件方式
- 如何从服务端下载的文件保存到SD卡
- 利用网络进行文件的上传,通过客户端上传到服务端
- 如何上传一个文件到Access数据库
- 安卓如何上传文件到服务器
- cocos-九宫格数据切割
- 第十三周项目二动物这样叫三
- 2016/6/21--网页点击保存按钮将数据存到数据库
- Android组件保活,service保活
- 软件项目的过程评审(转载)
- actionscript里面如何上传文件到服务端?
- BZOJ4455 [Zjoi2016]小星星
- 图像局部对比度增强算法
- IOS Dev Intro - Color Space Convertion
- -[UIViewController _loadViewFromNibNamed:bundle:] loaded the "xxx" nib but the view outlet was not s
- NYOJ 63 小猴子下落 (二叉树优化)
- 关于RDS只读实例延迟分析
- Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
- 如何排版 微信公众号「代码块」