[ActionScript3.0] 使用FileReference处理单个文件的上载

 

  1 package

  2 {

  3     import flash.display.SimpleButton;

  4     import flash.display.Sprite;

  5     import flash.errors.IllegalOperationError;

  6     import flash.errors.MemoryError;

  7     import flash.events.DataEvent;

  8     import flash.events.Event;

  9     import flash.events.MouseEvent;

 10     import flash.events.ProgressEvent;

 11     import flash.net.FileFilter;

 12     import flash.net.FileReference;

 13     import flash.net.URLRequest;

 14     import flash.net.URLRequestMethod;

 15     import flash.net.URLVariables;

 16     import flash.text.TextField;

 17     import flash.text.TextFieldAutoSize;

 18     /**

 19      * ...

 20      * @author Frost.Yen

 21      */

 22     public class UploadAS3 extends Sprite

 23     {

 24         private var _label:TextField; 

 25         private var _button:TextField;

 26         private var _fileRefer:FileReference; 

 27         private var _request:URLRequest = new URLRequest("http://localhost/yanzimen/");

 28         public function UploadAS3()

 29         {

 30             if(stage) init();

 31             else addEventListener(Event.ADDED_TO_STAGE,init);

 32         }

 33         private function init(e:Event = null):void

 34         {

 35             _label = new TextField(); 

 36             _label.text = "please select file"; 

 37             _label.autoSize = TextFieldAutoSize.LEFT;

 38             _label.background = true;

 39             _label.width = 300;

 40             _label.wordWrap = true;

 41             _label.backgroundColor = 0xffffff;

 42             _label.border = true;

 43             _button = new TextField();

 44             _button.text = "click here to select file";

 45             _button.autoSize = TextFieldAutoSize.LEFT; 

 46             _button.selectable = false;

 47             _button.background = true;

 48             _button.backgroundColor = 0xE29966;

 49             _button.border = true;

 50             this.addChild(_label); 

 51             this.addChild(_button); 

 52             _button.x = 310;

 53        

 54             _fileRefer = new FileReference();

 55             _button.addEventListener(MouseEvent.CLICK,toSelect);

 56             _fileRefer.addEventListener(Event.SELECT,onSelect);

 57             _fileRefer.addEventListener(Event.CANCEL,onCancel);

 58         }

 59         private function toSelect(e:MouseEvent):void

 60         {

 61             _fileRefer.browse(); //browse(typeFilter:Array=null) 使用 typeFilter 参数,可决定对话框显示哪些文件。

 62             _button.removeEventListener(MouseEvent.CLICK,toSelect); 

 63         }

 64         private function onProgress(e:ProgressEvent):void

 65         {

 66             _label.text = Number(Math.round(e.bytesLoaded / e.bytesTotal*100))+"%";

 67             //label.text = e.bytesLoaded+"/"+e.bytesTotal;

 68         }

 69         private function onComplete(e:Event):void

 70         {

 71             _fileRefer.removeEventListener(Event.COMPLETE,onComplete);

 72             _fileRefer.removeEventListener(ProgressEvent.PROGRESS,onProgress);

 73             _button.addEventListener(MouseEvent.CLICK,toUpload);

 74             _label.text = "load complete!";

 75             _button.text = "upload";

 76         }

 77         private function toUpload(e:MouseEvent):void{

 78             onUpLoad(_fileRefer);

 79         }

 80         private function onSelect(e:Event):void

 81         {

 82             trace("the name of the selected file:",(e.target as FileReference).name);

 83             _label.text = "file name:"+(e.target as FileReference).name;

 84             _fileRefer.addEventListener(Event.COMPLETE,onComplete);

 85             _fileRefer.addEventListener(ProgressEvent.PROGRESS,onProgress);

 86             _fileRefer.load();

 87         }

 88         private function onCancel(e:Event):void

 89         {

 90             trace("cancel to upload");

 91             _button.addEventListener(MouseEvent.CLICK,toSelect); 

 92         }

 93         /**

 94          * 调用FileReference的实例方法upload()实现文件上传

 95          * @param    file

 96          */

 97         private function onUpLoad(file:FileReference):void

 98         {

 99             _label.text = "file size"+Number(file.size/1024/1024).toFixed(2)+"M";

100             var variables:URLVariables = new URLVariables();

101             variables.fileName = file.name;

102             _request.data = variables;

103             _request.method = URLRequestMethod.POST;

104             file.addEventListener(ProgressEvent.PROGRESS, progressHandler);

105             file.addEventListener(Event.COMPLETE, completeHandler);

106             file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeDataHandler);

107             try

108             {

109                 file.upload(_request);

110             } 

111             catch(error:Error) 

112             {

113                 trace(error.message);

114             }

115        

116             function progressHandler(e:ProgressEvent):void

117             {

118                 _label.text = "uploading "+Math.round(100 * e.bytesLoaded / e.bytesTotal) + "%";

119             }

120             function completeHandler(e:Event):void

121             {

122                 var file:FileReference = FileReference(e.target);

123                 file.removeEventListener(ProgressEvent.PROGRESS, progressHandler);

124                 file.removeEventListener(Event.COMPLETE, completeHandler);

125                 _button.removeEventListener(MouseEvent.CLICK,toUpload);

126                 _button.addEventListener(MouseEvent.CLICK,toSelect);

127                 _label.text = "upload complete";

128                 _button.text = "click here to select file";

129             }

130             function completeDataHandler(e:DataEvent):void

131             {

132                 var file:FileReference = FileReference(e.target);

133                 file.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeHandler);

134                 trace(e.data);//上传成功后,从后台返回的数据

135             }

136         }

137         /**

138          * FileFilter 类用于表示在调用 FileReference.browse() 方法、FileReferenceList.browse() 方法或调用 File、FileReference 或 FileReferenceList 对象的 browse 方法时显示的文件浏览对话框中显示用户系统上的哪些文件。

139          * @return

140          */

141         private function getImageTypeFilter():FileFilter {

142             return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");

143         }

144       

145         private function getTextTypeFilter():FileFilter {

146             return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf");

147         }

148     }

149 }

 

你可能感兴趣的:(actionscript)