zoukankan      html  css  js  c++  java
  • 纯AS代码实现可预览本地图片的flash上传客户端(as3.0)

    需要Flash Player 10+版本的支持,原理就是主要利用fp10中的FileReference.load(),FileReference.data和 Loader.loadBytes()三个方法通过图片加载到内存中,来实现预览本地图片,但这个方式不太适用大图片预览,图片越大内存消耗就越大。

    [注意]:

    1.我这边图片上传路径是无效的,所以图片上传失败是正常的,你们可以改一下上传路径即可;

    2.需要Flash Player 10的支持;

    3.这次主要研究是预览本地图片功能。

      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 kinglong@gmail.com   
     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.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._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,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 = false, autoSize: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 }
  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/ztdy/p/3617021.html
Copyright © 2011-2022 走看看