·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]利用as3+flash通过摄像头或本地上传图片到服务器

时间:2014-12-01 16:21酷播
[AS3]通过摄像头或本地上传图片到服务器

[AS3]通过摄像头或本地上传图片到服务器

  1. package  
  2. { 
  3.     import flash.display.Sprite; 
  4.     import flash.media.Camera; 
  5.     import flash.media.Video; 
  6.     import flash.events.Event; 
  7.     import flash.events.StatusEvent; 
  8.     import flash.events.ProgressEvent; 
  9.     import flash.events.IOErrorEvent; 
  10.     import flash.events.SecurityErrorEvent; 
  11.     import flash.events.MouseEvent; 
  12.     import flash.display.BitmapData; 
  13.     import flash.display.Bitmap; 
  14.     import flash.geom.Matrix; 
  15.     import mx.graphics.codec.JPEGEncoder; 
  16.     import flash.utils.ByteArray; 
  17.     import flash.net.LocalConnection; 
  18.     import flash.net.URLRequestHeader; 
  19.     import flash.net.URLRequest; 
  20.     import flash.net.URLLoader; 
  21.     import flash.net.URLRequestMethod; 
  22.     import flash.net.URLVariables; 
  23.     import flash.net.FileFilter; 
  24.     import flash.net.FileReference; 
  25.     import flash.net.FileReferenceList; 
  26.  
  27.  
  28.     [SWF(width = "720",height = "450",backgroundColor = "#445566")] 
  29.     public class Main extends Sprite 
  30.     { 
  31.         private var cam:Camera; 
  32.         private var vid:Video; 
  33.         private var upMc; 
  34.         private var bitmap:Bitmap; 
  35.         private var bitmapData:BitmapData; 
  36.         private var mcArr = []; 
  37.  
  38.         private var frl:FileReferenceList; 
  39.         private var uploadURL; 
  40.  
  41.         public function Main():void 
  42.         { 
  43.             Init(); 
  44.             frl=new FileReferenceList(); 
  45.             frl.addEventListener(Event.SELECT,selectHandler); 
  46.             frl.addEventListener(Event.CANCEL,cancelHandler); 
  47.         } 
  48.         private function Init() 
  49.         { 
  50.             getCamer(); 
  51.         } 
  52.         private function getCamer() 
  53.         { 
  54.             cam = Camera.getCamera(); 
  55.             cam.addEventListener(StatusEvent.STATUS,statusHandler); 
  56.             cam.setMode(384,216,12); 
  57.             cam.setQuality(0,100); 
  58.             vid = new Video  ; 
  59.             vid.width = 384; 
  60.             vid.height = 216; 
  61.             vid.attachCamera(cam); 
  62.             addChild(vid); 
  63.             vid.x = stage.stageWidth / 2 - vid.width / 2; 
  64.             vid.y = stage.stageHeight / 2 - vid.height / 2; 
  65.  
  66.             bitmap = new Bitmap(); 
  67.             bitmapData = new BitmapData(vid.width,vid.height,true,0); 
  68.         } 
  69.         private function statusHandler(e:StatusEvent) 
  70.         { 
  71.             switch (e.code) 
  72.             { 
  73.                 case "Camera.Unmuted" : 
  74.                     uploadFun(true); 
  75.                     break; 
  76.                 case "Camera.Muted" : 
  77.                     uploadFun(false); 
  78.                     break; 
  79.                 default : 
  80.                     break; 
  81.             } 
  82.         } 
  83.  
  84.         private function uploadFun(right:Boolean) 
  85.         { 
  86.             upMc=new UpMc(); 
  87.             addChild(upMc); 
  88.             visibleBtn(); 
  89.             if (right) 
  90.             { 
  91.                 upMc.x = vid.x + vid.width - upMc.width; 
  92.                 upMc.y = vid.y + 10 + vid.height; 
  93.                 pleaseScreen(); 
  94.             } 
  95.             else 
  96.             { 
  97.                 upMc.x = stage.stageHeight / 2 - upMc.width / 2; 
  98.                 upMc.y = stage.stageHeight / 2 + upMc.height / 2; 
  99.                 pleaseLoad(); 
  100.             } 
  101.         } 
  102.  
  103.         private function pleaseLoad() 
  104.         { 
  105.             upMc.browseBtn.visible = true; 
  106.             upMc.browseBtn.addEventListener(MouseEvent.CLICK,clickHandler); 
  107.             mcArr.push(upMc.browseBtn); 
  108.         } 
  109.         private function upDataImg(type:String) 
  110.         { 
  111.             switch (type) 
  112.             { 
  113.                 case "1" : 
  114.                     var jpgSource:BitmapData = new BitmapData(bitmap.width,bitmap.height,true,0); 
  115.                     jpgSource.draw(bitmap); 
  116.                     var jpgEncoder:JPEGEncoder = new JPEGEncoder(300); 
  117.                     var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); 
  118.  
  119.                     var domain:String = "localhost"; 
  120.                     var LocalConn:LocalConnection=new LocalConnection(); 
  121.                     domain = LocalConn.domain; 
  122.  
  123.                     var header:URLRequestHeader = new URLRequestHeader("Content-type","application/octet-stream"); 
  124.  
  125.                     var jpgURLRequest:URLRequest=new URLRequest("http://"+domain+"/vini/up/jpg_upload.php?name="+ "gogo"); 
  126.                     jpgURLRequest.requestHeaders.push(header); 
  127.                     jpgURLRequest.method = URLRequestMethod.POST; 
  128.                     jpgURLRequest.data = jpgStream; 
  129.  
  130.                     var myVariables:URLVariables=new URLVariables();//这个用不到了。。 
  131.  
  132.                     var loader:URLLoader=new URLLoader(); 
  133.                     loader.load(jpgURLRequest); 
  134.                     loader.addEventListener(Event.COMPLETE,uploadCompleteHandler); 
  135.                     break; 
  136.                 default : 
  137.                     break; 
  138.             } 
  139.         } 
  140.  
  141.         private function uploadCompleteHandler(e:Event) 
  142.         { 
  143.             trace("图片上传成功了,这里要给数据库添加记录吧!"); 
  144.         } 
  145.  
  146.         public function clickHandler(e:MouseEvent) 
  147.         { 
  148.  
  149.             switch (e.target.name) 
  150.             { 
  151.                 case "screenBtn" : 
  152.                     removeEvent(); 
  153.                     bitmapData.draw(vid); 
  154.                     bitmap.bitmapData = bitmapData; 
  155.                     bitmap.width = vid.width; 
  156.                     bitmap.height = vid.height; 
  157.                     removeChild(vid); 
  158.                     addChild(bitmap); 
  159.                     bitmap.x = stage.stageWidth / 2 - bitmap.width / 2; 
  160.                     bitmap.y = stage.stageHeight / 2 - bitmap.height / 2; 
  161.                     upMc.mesTxt.text = "请上传图片或重新截图"; 
  162.  
  163.                     upMc.uploadBtn.visible = true; 
  164.                     upMc.uploadBtn.addEventListener(MouseEvent.CLICK,clickHandler); 
  165.                     mcArr.push(upMc.uploadBtn); 
  166.  
  167.                     upMc.retakeBtn.visible = true; 
  168.                     upMc.retakeBtn.addEventListener(MouseEvent.CLICK,clickHandler); 
  169.                     mcArr.push(upMc.retakeBtn); 
  170.  
  171.                     upMcupMc.retakeBtn.x = upMc.uploadBtn.x + upMc.retakeBtn.width + 5; 
  172.                     break; 
  173.                 case "uploadBtn" : 
  174.                     removeEvent(); 
  175.                     upMc.mesTxt.text = "图片开始上传中"; 
  176.                     upDataImg("1"); 
  177.                     break; 
  178.                 case "retakeBtn" : 
  179.                     removeEvent(); 
  180.                     removeChild(bitmap); 
  181.                     addChild(vid); 
  182.                     pleaseScreen(); 
  183.                     break; 
  184.                 case "browseBtn" : 
  185.                     //removeEvent(); 
  186.                     uploadhandler("图片档案(*.jpg;*.gif;*.png)|*.jpg;*.gif;*.png"); 
  187.                     break; 
  188.             } 
  189.         } 
  190.  
  191.  
  192.         public function uploadhandler(filter_str,type:String=''):void 
  193.         { 
  194.  
  195.  
  196.             var up_name = get_pic_name(5)+'.'+ getFileExt(filter_str); 
  197.             trace(up_name); 
  198.             uploadURL = new URLRequest('http://localhost/vini/up/upload.php?tg_name='+up_name+'&filepath=loadImg/'); 
  199.             //uploadURL = new URLRequest('http://localhost/zh_cn/ebook/upload.php?tg_name='+up_name+'&filepath=http://www.cnblogs.com/vini/up/loadImg/'); 
  200.             var tmp_arr:Array = filter_str.split('|'); 
  201.             trace(tmp_arr); 
  202.             var filter:FileFilter = new FileFilter(tmp_arr[0],tmp_arr[1]); 
  203.             frl.browse([filter]); 
  204.         } 
  205.  
  206.  
  207.  
  208.         private function selectHandler(e:Event) 
  209.         { 
  210.             trace("可以上传么"); 
  211.             var fileReferenceList:FileReferenceList = e.target as FileReferenceList; 
  212.             var fileList:Array = fileReferenceList.fileList; 
  213.             for (var i:uint = 0; i < 1; i++) 
  214.             { 
  215.                 // org is : i < fileList.length : now just upload one  
  216.                 //control.test_txt.appendText("fileList["+i+"]:"+fileList[i].name + "\n"); 
  217.                 addPendingFile(fileList[i]); 
  218.             } 
  219.         } 
  220.  
  221.         private function addPendingFile(file:FileReference):void 
  222.         { 
  223.             //control.load_file_bar.visible = true;  //显示加载进度 
  224.  
  225.             file.addEventListener(Event.OPEN, openHandler); 
  226.             file.addEventListener(Event.COMPLETE, completeHandler); 
  227.             file.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
  228.             file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
  229.             file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
  230.             file.upload(uploadURL); 
  231.             trace("开始上传"); 
  232.         } 
  233.  
  234.  
  235.         private function openHandler(event:Event):void 
  236.         { 
  237.             var file:FileReference = FileReference(event.target); 
  238.             trace("开始了么"); 
  239.             //control.load_file_bar.ready(file.name); 
  240.         } 
  241.         private function completeHandler(event:Event):void 
  242.         { 
  243.             trace("aaa"+event.target.data); 
  244.             return; 
  245.             var file:FileReference = FileReference(event.target); 
  246.             trace(file.name); 
  247.         } 
  248.  
  249.         private function progressHandler(event:ProgressEvent):void 
  250.         { 
  251.             trace("过程过程"); 
  252.             var file:FileReference = FileReference(event.target); 
  253.             if (event.bytesLoaded / event.bytesTotal < 1) 
  254.             { 
  255.                 //control.load_file_bar.ready(file.name); 
  256.             } 
  257.             else 
  258.             { 
  259.                 //control.load_file_bar.updateinfo(file.name, event.bytesLoaded, event.bytesTotal); 
  260.             } 
  261.         } 
  262.         private function ioErrorHandler(event:Event):void 
  263.         { 
  264.             trace("错误一"); 
  265.             //control.test_txt.appendText("ioErrorHandler \n"); 
  266.         } 
  267.         private function securityErrorHandler(event:Event):void 
  268.         { 
  269.             trace("错误二"); 
  270.             //control.test_txt.appendText("securityErrorHandler \n"); 
  271.         } 
  272.  
  273.         private function cancelHandler(e:Event) 
  274.         { 
  275.  
  276.         } 
  277.  
  278.         private function pleaseScreen() 
  279.         { 
  280.             upMc.mesTxt.text = "请截图"; 
  281.             upMc.screenBtn.visible = true; 
  282.             upMc.screenBtn.addEventListener(MouseEvent.CLICK,clickHandler); 
  283.             mcArr.push(upMc.screenBtn); 
  284.         } 
  285.  
  286.         private function removeEvent() 
  287.         { 
  288.             var len:int = mcArr.length; 
  289.             for (var i=0; i<len; i++) 
  290.             { 
  291.                 mcArr[i].visible = false; 
  292.                 mcArr[i].removeEventListener(MouseEvent.CLICK,clickHandler); 
  293.             } 
  294.             mcArr = []; 
  295.         } 
  296.  
  297.         private function visibleBtn() 
  298.         { 
  299.             upMc.retakeBtn.visible = false; 
  300.             upMc.screenBtn.visible = false; 
  301.             upMc.browseBtn.visible = false; 
  302.             upMc.uploadBtn.visible = false; 
  303.         } 
  304.  
  305.         private function get_pic_name(no=null) 
  306.         { 
  307.             var nowtime:Date = new Date(); 
  308.             var str:String = timeformate(nowtime.getFullYear()); 
  309.             strstr = str.concat(timeformate(nowtime.getMonth()+1),timeformate(nowtime.getDate()) 
  310.             ,timeformate(nowtime.getHours()),timeformate(nowtime.getMinutes()),timeformate(nowtime.getSeconds())); 
  311.             if (no==null) 
  312.             { 
  313.                 return str; 
  314.             } 
  315.             for (var i:uint=0; i<no; i++) 
  316.             { 
  317.                 var ch:Number = randRange(0,51); 
  318.  
  319.                 if (ch>=26) 
  320.                 { 
  321.                     str += String.fromCharCode(97+ch-26); 
  322.                 } 
  323.                 else 
  324.                 { 
  325.                     str += String.fromCharCode(65+ch); 
  326.                 } 
  327.             } 
  328.             return str; 
  329.         } 
  330.  
  331.         private function getFileExt(file_name) 
  332.         { 
  333.             var file_array = file_name.split("."); 
  334.             trace("vvv:"+file_array[file_array.length - 1]) 
  335.             return file_array[file_array.length - 1]; 
  336.         } 
  337.  
  338.         private function timeformate(num):String 
  339.         { 
  340.             if (num < 10) 
  341.             { 
  342.                 return ("0" + num); 
  343.             } 
  344.             return num; 
  345.  
  346.         } 
  347.  
  348.         private function randRange(min:Number, max:Number):Number 
  349.         { 
  350.             var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min; 
  351.             return randomNum; 
  352.         } 
  353.     } 
  354. } 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器