[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 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms + Data Structures = Programs

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》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具