xiangpei01
Flash/Flex构架师 / 广东
积分 146

as代码实现本地图片上传预览


2010-07-06 点击:


 

  1. package project.test       
  2. {      
  3.     import flash.display.*;      
  4.     import flash.geom.Rectangle;      
  5.     import flash.net.*;      
  6.     import flash.text.*;      
  7.     import flash.filters.*;      
  8.     import flash.events.*;      
  9.     import flash.system.Security;      
  10.           
  11.     import fl.controls.Button;      
  12.     import fl.controls.ProgressBar;      
  13.     import fl.controls.ProgressBarMode;      
  14.           
  15.     /**     
  16.      * @link [email]kinglong@gmail.com[/email]     
  17.      * @author Kinglong     
  18.      * @playerversion fp10        
  19.      */      
  20.     [SWF(width="500"height="300"frameRate="24"backgroundColor="#FFFFFF")]      
  21.     public class TestUpload extends Sprite {      
  22.               
  23.         private const DEFAULT_UPLOAD_PAGE:String = "http://test.klstudio.com/upload.asp";             
  24.         private const BOX_WIDTH:uint = 500;      
  25.         private const BOX_HEIGHT:uint = 300;      
  26.               
  27.         private const STATE_CACHE:String = "cache";      
  28.         private const STATE_UPLOAD:String = "upload";      
  29.               
  30.         private var _filters:Array;      
  31.         private var _file:FileReference;      
  32.         private var _loader:Loader;      
  33.         private var _progress:ProgressBar;      
  34.         private var _state:String;      
  35.         private var _buttons:Array;      
  36.         private var _labels:Array;      
  37.         private var _txts:Array;      
  38.         private var _rect:Rectangle;      
  39.         private var _state_txt:TextField;      
  40.               
  41.         public function TestUpload() {      
  42.             Security.allowDomain("*");      
  43.                   
  44.             _buttons = [];      
  45.             _txts = [];      
  46.             _labels = ["文件名称:","文件类型:","文件大小:","修改时间:"];      
  47.                   
  48.             _rect = new Rectangle(20, 80, 180, 180);      
  49.             _state = STATE_CACHE;      
  50.                   
  51.             //背景;      
  52.             this.graphics.beginFill(0x333333);      
  53.             this.graphics.drawRoundRect(0, 0, BOX_WIDTH, BOX_HEIGHT, 10, 10);      
  54.             this.graphics.endFill();      
  55.             this.graphics.beginFill(0xEFEFEF);      
  56.             this.graphics.drawRoundRect(1, 1, BOX_WIDTH - 2, BOX_HEIGHT - 2, 10, 10);      
  57.             this.graphics.endFill();      
  58.             this.graphics.beginFill(0x666666);      
  59.             this.graphics.drawRoundRect(10, 30, BOX_WIDTH - 20, BOX_HEIGHT - 60, 20, 20);                 
  60.             this.graphics.endFill();      
  61.             this.graphics.beginFill(0xFEFEFE);      
  62.             this.graphics.drawRoundRect(11, 31, BOX_WIDTH - 22, BOX_HEIGHT - 62, 20, 20);      
  63.             this.graphics.endFill();      
  64.                   
  65.             this.graphics.beginFill(0xCCCCCC);      
  66.             this.graphics.drawRect(11, 70, BOX_WIDTH - 22, 1);      
  67.             this.graphics.endFill();      
  68.                   
  69.             this.graphics.beginFill(0x000000);      
  70.             this.graphics.drawRect(_rect.x-1, _rect.y-1, _rect.width+2, _rect.height+2);      
  71.             this.graphics.endFill();                  
  72.             this.graphics.beginFill(0xEEEEEE);      
  73.             this.graphics.drawRect(_rect.x, _rect.y, _rect.width, _rect.height);      
  74.             this.graphics.endFill();      
  75.                   
  76.                   
  77.             //标题;      
  78.             var label:TextField;                  
  79.             label = getLabel("图片上传(预览图片版) by Kinglong", getTextFormat(0xFFFFFF, 14, true));      
  80.             label.x = 10;      
  81.             label.y = 5;      
  82.             label.filters = [getLabelFilter(0x000000)];      
  83.             this.addChild(label);      
  84.                   
  85.             for (var i:uint = 0; i < _labels.length; i++ ) {               
  86.                 label = getLabel(_labels[i], getTextFormat(0x333333, 12), false, false);                      
  87.                 label.x = _rect.right+5;      
  88.                 label.y = _rect.y + 25 * i;      
  89.                 label.width = 280;      
  90.                 label.height = 20;      
  91.                 _txts.push(label);      
  92.                 this.addChild(label);      
  93.             }                 
  94.                   
  95.             _state_txt = getLabel("状态:", getTextFormat(0x333333, 12));      
  96.             _state_txt.x = 10;      
  97.             _state_txt.y = BOX_HEIGHT - _state_txt.height - 5;      
  98.             this.addChild(_state_txt);      
  99.                   
  100.             //按钮;      
  101.             var button:Button;      
  102.             button = getButton("选择文件", 80);               
  103.             button.move(20, 40);      
  104.                   
  105.             button = getButton("上传文件", 80);               
  106.             button.move(105, 40);      
  107.             button.enabled = false;      
  108.                   
  109.             //进度条;      
  110.             _progress = new ProgressBar();      
  111.             _progress.move(190, 40);      
  112.             _progress.setSize(290,22);      
  113.             _progress.mode = ProgressBarMode.MANUAL;                              
  114.             this.addChild(_progress);      
  115.                   
  116.             //文件类型;      
  117.             _filters = [];      
  118.             var filter:FileFilter;                
  119.             filter = new FileFilter("所有支持图片文件(*.jpg,*.jpeg,*.gif,*.png)", "*.jpg;*.jpeg;*.gif;*.png");      
  120.             _filters[_filters.length] = filter;      
  121.             filter = new FileFilter("JPEG files(*.jpg,*.jpeg)","*.jpg;*.jpeg");      
  122.             _filters[_filters.length] = filter;      
  123.             filter = new FileFilter("GIF files (*.gif)","*.gif");      
  124.             _filters[_filters.length] = filter;      
  125.             filter = new FileFilter("PNG files(*.png)","*.png");      
  126.             _filters[_filters.length] = filter;       
  127.                   
  128.             _file = new FileReference();       
  129.             _file.addEventListener(Event.COMPLETE, fileHandler);      
  130.             _file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileHandler);      
  131.             _file.addEventListener(Event.SELECT, fileHandler);      
  132.             _file.addEventListener(Event.OPEN, fileHandler);                  
  133.             _file.addEventListener(ProgressEvent.PROGRESS, fileHandler);      
  134.             _file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, fileHandler);      
  135.             _file.addEventListener(IOErrorEvent.IO_ERROR, fileHandler);      
  136.             _file.addEventListener(HTTPStatusEvent.HTTP_STATUS, fileHandler);      
  137.                   
  138.             _loader = new Loader();      
  139.             _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);      
  140.             this.addChild(_loader);      
  141.         }      
  142.               
  143.         public function get state():String {      
  144.             return _state;      
  145.         }      
  146.               
  147.         private function clickHandler(event:MouseEvent):void {      
  148.             switch(event.target) {      
  149.                 case _buttons[0]:      
  150.                     _file.browse(_filters);      
  151.                     break;      
  152.                 case _buttons[1]:      
  153.                     _file.upload(new URLRequest(DEFAULT_UPLOAD_PAGE));      
  154.                     _state = STATE_UPLOAD;                        
  155.                     _buttons[0].enabled = false;      
  156.                     _buttons[1].enabled = false;      
  157.                     break;      
  158.             }      
  159.         }      
  160.               
  161.         private function loadHandler(event:Event):void {      
  162.             _loader_loader.scaleX = _loader.scaleY = 1;      
  163.             var w:uint = _loader.width;      
  164.             var h:uint = _loader.height;      
  165.             if (w > _rect.width || h > _rect.height) {                      
  166.                 var ip:Number = w / h;      
  167.                 var lp:Number = _rect.width / _rect.height;               
  168.                 _loader.width = (ip > lp)?_rect.width:_rect.height*ip;      
  169.                 _loader.height = (ip > lp)?_rect.width / ip:_rect.height;      
  170.             }      
  171.             _loader.x = _rect.x + (_rect.width - _loader.width) / 2;      
  172.             _loader.y = _rect.y + (_rect.height - _loader.height) / 2;                
  173.             _loader.visible = true;      
  174.         }      
  175.               
  176.         private function fileHandler(event:Event):void {      
  177.             switch(event.type) {      
  178.                 case Event.COMPLETE:      
  179.                     if(state == STATE_CACHE){      
  180.                         _loader.loadBytes(_file.data);      
  181.                     }      
  182.                     break;      
  183.                 case DataEvent.UPLOAD_COMPLETE_DATA:      
  184.                     debug("图片上传完成!");      
  185.                     _buttons[0].enabled = true;      
  186.                     _buttons[1].enabled = false;      
  187.                     _progress.setProgress(0, 1);      
  188.                     break;      
  189.                 case Event.SELECT:      
  190.                     _txts[0].text = _labels[0] + _file.name;      
  191.                     _txts[1].text = _labels[1] + _file.type;      
  192.                     _txts[2].text = _labels[2] + ((_file.size > 1024 * 1024)?Math.round(_file.size * 10 / (1024*1024))/10    
  193. + "MB":Math.round(_file.size * 10 / 1024)/10 + "KB");                        
  194.                     _txts[3].text = _labels[3] + date2str(_file.modificationDate);      
  195.                     _buttons[0].enabled = true;      
  196.                     _buttons[1].enabled = true;      
  197.                     _file.load();      
  198.                     _state = STATE_CACHE;      
  199.                     _loader.visible = false;      
  200.                     debug("图片已经准备!");      
  201.                     break;      
  202.                 case Event.OPEN:      
  203.                     if(state == STATE_UPLOAD){      
  204.                         debug("正在上传图片...");      
  205.                     }      
  206.                     break;      
  207.                 case ProgressEvent.PROGRESS:      
  208.                     if (state == STATE_UPLOAD) {      
  209.                         var pEvent:ProgressEvent = event as ProgressEvent;      
  210.                         _progress.setProgress(pEvent.bytesLoaded, pEvent.bytesTotal);      
  211.                     }      
  212.                     break;      
  213.                 case SecurityErrorEvent.SECURITY_ERROR:      
  214.                 case IOErrorEvent.IO_ERROR:      
  215.                 case HTTPStatusEvent.HTTP_STATUS:                         
  216.                     if (state == STATE_UPLOAD) {      
  217.                         debug("图片上传失败!");      
  218.                         _buttons[0].enabled = true;      
  219.                         _buttons[1].enabled = true;      
  220.                     }else {      
  221.                         debug("图片缓冲失败!");      
  222.                     }      
  223.                     _progress.setProgress(0, 1);      
  224.                     break;      
  225.                       
  226.             }      
  227.         }      
  228.               
  229.         private function getButton(lbl:String,width:uint=120):Button {      
  230.             var button:Button = new Button();      
  231.             button.label = lbl;      
  232.             button.setSize(width, 22);        
  233.             button.setStyle("textFormat", getTextFormat());      
  234.             button.setStyle("disabledTextFormat", getTextFormat(0x999999));      
  235.             button.setStyle("textPadding",4);      
  236.             button.addEventListener(MouseEvent.CLICK, clickHandler);                  
  237.             this.addChild(button);      
  238.             _buttons.push(button);      
  239.             return button;      
  240.         }      
  241.               
  242.         private function getLabel(label:String, format:TextFormat, selectable:    
  243. Boolean = falseautoSize:Boolean = true):TextField {               
  244.             var lbl:TextField = new TextField();      
  245.             lbl.selectable = selectable;      
  246.             lbl.defaultTextFormat = format;      
  247.             if(autoSize){      
  248.                 lbl.autoSize = TextFieldAutoSize.LEFT;      
  249.             }      
  250.             lbl.text = label;      
  251.             return lbl;      
  252.         }      
  253.               
  254.         private function getTextFormat(color:uint=0x000000,size:uint = 12,bold:Boolean=false):    
  255. TextFormat {      
  256.             var format:TextFormat = new TextFormat();      
  257.             format.font = "宋体";      
  258.             format.color = color;      
  259.             format.size = size;      
  260.             format.bold = bold;      
  261.             return format;      
  262.         }      
  263.               
  264.         private function getLabelFilter(color:uint=0xFFFFFF):BitmapFilter {      
  265.             var alpha:Number = 0.8;      
  266.             var blurX:Number = 2;      
  267.             var blurY:Number = 2;      
  268.             var strength:Number = 3;      
  269.             var inner:Boolean = false;      
  270.             var knockout:Boolean = false;      
  271.             var quality:Number = BitmapFilterQuality.HIGH;      
  272.       
  273.             return new GlowFilter(color,      
  274.                                   alpha,      
  275.                                   blurX,      
  276.                                   blurY,      
  277.                                   strength,      
  278.                                   quality,      
  279.                                   inner,      
  280.                                   knockout);      
  281.         }      
  282.               
  283.         private function date2str(day:Date):String {      
  284.             var str:String = day.getFullYear() + "-";      
  285.             str += num2str(day.getMonth() + 1) + "-";      
  286.             str += num2str(day.getDate()) + " ";      
  287.             str += num2str(day.getHours()) + ":";      
  288.             str += num2str(day.getMinutes()) + ":";      
  289.             str += num2str(day.getSeconds());      
  290.             return str;      
  291.         }      
  292.               
  293.         private function num2str(val:Number):String {      
  294.             var str:String = "00" + val;      
  295.             return str.substr(str.length - 2, 2);                 
  296.         }      
  297.               
  298.         private function debug(message:String):void {      
  299.             _state_txt.text = message;      
  300.         }      
  301.               
  302.     }      
  303.           
  304. }  

 


    xiangpei01  版权所有
    禁止任何用途(禁止转载、商用和个人使用)


所属分类:技术经验分享

本文标签:as代码

各位正在潜水的同学请注意,有0位无聊人士 在EBIBI附近出没!







    点击我更换图片 看不清
    评论内容 (*必填):

    (Ctrl + Enter 快速提交)