[ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据
栏目: JavaScript · 发布时间: 8年前
内容简介:[ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据
主类 HTTPSendPHP.as
1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest.HttpRequestBuilder; 5 import com.fylib.httpRequest.HttpRequestBuilderConsts; 6 import flash.display.Bitmap; 7 import flash.display.BitmapData; 8 import flash.display.Loader; 9 import flash.display.Sprite; 10 import flash.events.Event; 11 import flash.events.HTTPStatusEvent; 12 import flash.net.URLLoader; 13 import flash.net.URLRequest; 14 import flash.utils.ByteArray; 15 16 /** 17 * ... 18 * @author Frost.Yen 19 */ 20 public class HTTPSendPHP extends Sprite 21 { 22 private var bmp:Bitmap; 23 public function HTTPSendPHP() 24 { 25 var ldr:Loader = new Loader ; 26 ldr.load(new URLRequest("image.jpg")); 27 //加载的图片; 28 ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); 29 } 30 31 private function onComplete(e:Event):void 32 { 33 var bmpd:BitmapData = e.target.content as Bitmap.bitmapData; 34 var jpgEncoder:JPGEncoder = new JPGEncoder(80);//图片质量 35 var jpgStream:ByteArray = jpgEncoder.encode(bmpd);//将图片数据转换成ByteArray存储 36 37 var HttpR:HttpRequestBuilder = new HttpRequestBuilder("php端地址");//php端地址 38 HttpR.writeImage("图片变量","图片名称",HttpRequestBuilderConsts.JPG,jpgStream); 39 //图片变量如:"data[Image][name]"; 40 HttpR.writeHttpEnd(); 41 HttpR.writeSeparator(); 42 43 var loader:URLLoader = new URLLoader ; 44 var request:URLRequest = HttpR.getURLrequest(); 45 loader.load(request); 46 loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler); 47 loader.addEventListener(Event.COMPLETE,onSendComplete); 48 } 49 50 private function onSendComplete(e:Event):void 51 { 52 trace("complete"); 53 } 54 55 private function httpStatusHandler(e:HTTPStatusEvent):void 56 { 57 trace(("status is " + e.status)); 58 } 59 } 60 61 }
其他类
1 package com.fylib.httpRequest 2 { 3 import flash.net.URLRequest; 4 import flash.net.URLRequestMethod; 5 import flash.net.URLVariables; 6 import flash.utils.ByteArray; 7 8 /** 9 * ... 10 * @author 11 */ 12 public class HttpRequestBuilder 13 { 14 /** 15 * 构造的URLRequest 16 */ 17 private var _request:URLRequest; 18 /** 19 * 构造的二进制ByteArray 20 */ 21 private var _byteArray:ByteArray; 22 /** 23 * Http协议分割符 24 */ 25 private var _separator:String; 26 /** 27 * 标志位 是否填写HTTP文件尾 28 */ 29 private var PROTOCAL_END_SET:Boolean = false; 30 31 public function HttpRequestBuilder($url:String,$separator:String="7d86d710144a") 32 { 33 //初始化 34 this._separator = $separator; 35 this._request = new URLRequest($url); 36 this._request.method = URLRequestMethod.POST; 37 this._request.contentType = "multipart/form-data; boundary=---------------------------" + this._separator; 38 this._byteArray = new ByteArray ; 39 } 40 41 /* 42 * 写入变量 43 * @param $name 写入的变量名 44 * @param $value 写入的变量值 45 */ 46 public function writeVariable($name:String,$value:String):void 47 { 48 writeSeparator(); 49 _byteArray.writeUTFBytes(((("Content-Disposition: form-data; name=\"" + $name) + "\"\r\n\r\n") + $value)); 50 } 51 52 /* 53 * 写入图片 54 * @param $name 变量名 55 * @param $filename 图片文件名 56 * @param $type 图片类型,在HttpRequestBuilderConsts下定义 57 * @param $content 图片二进制数据 58 */ 59 public function writeImage($name:String,$filename:String,$type:String,$content:ByteArray):void 60 { 61 writeSeparator(); 62 _byteArray.writeUTFBytes((((((("Content-Disposition: form-data; name=\"" + $name) + "\"; filename=\"") + $filename) + "\"\r\nContent-Type: ") + $type) + "\r\n\r\n")); 63 _byteArray.writeBytes($content); 64 } 65 66 /* 67 * 构造HTTP分割线 68 */ 69 public function writeSeparator():void 70 { 71 _byteArray.writeUTFBytes((("\r\n-----------------------------" + separator) + "\r\n")); 72 } 73 74 /* 75 * 构造HTTP结尾,只能调用一次,二次调用会抛出错误 76 */ 77 public function writeHttpEnd():void 78 { 79 if (! PROTOCAL_END_SET) 80 { 81 _byteArray.writeUTFBytes((("\r\n-----------------------------" + separator) + "--")); 82 PROTOCAL_END_SET = true; 83 } 84 else 85 { 86 throw new Error("Write the Http End More Than Once"); 87 } 88 } 89 90 /* 91 * 获取构造好的URLRequest 92 */ 93 public function getURLrequest():URLRequest 94 { 95 return this.request; 96 } 97 98 //get set 99 public function get separator():String 100 { 101 return _separator; 102 } 103 /*public function set separator(value:String):void 104 { 105 //TODO 替换之前写入的内容 106 _separator = value; 107 }*/ 108 109 /* 110 * 获取前会检查是否写入HTTP结尾,未调用的话会报错 111 */ 112 public function get request():URLRequest 113 { 114 if (! PROTOCAL_END_SET) 115 { 116 throw new Error("Havn't Write the Http End Yet"); 117 }//??还是应该自动构造 118 _request.data = _byteArray; 119 return _request; 120 } 121 } 122 123 }
1 package com.lylib.httpRequest 2 { 3 /** 4 * ... 5 * @author 6 */ 7 public class HttpRequestBuilderConsts 8 { 9 public static const JPG:String = "image/jpeg"; 10 public static const PNG:String = "image/x-png"; 11 12 public function HttpRequestBuilderConsts() 13 { 14 15 } 16 17 } 18 19 }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 原生JS发送异步数据请求
- 向 channel 发送数据的问题
- (译)发送数据到新路由
- 爬取LeetCode题目——如何发送GraphQL Query获取数据
- Python实现定时备份mysql数据库并把备份数据库邮件发送
- Python实现定时备份mysql数据库并把备份数据库邮件发送
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms + Data Structures = Programs
Niklaus Wirth / Prentice Hall / 1975-11-11 / GBP 84.95
It might seem completely dated with all its examples written in the now outmoded Pascal programming language (well, unless you are one of those Delphi zealot trying to resist to the Java/.NET dominanc......一起来看看 《Algorithms + Data Structures = Programs》 这本书的介绍吧!