[ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据

时间:2022-02-08 10:12:43

主类 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.fylib.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 }