[ActionScript3.0] 使用FileReferenceList处理多个文件上载

  1 package
  2 {
  3     import flash.display.Sprite;
  4     import flash.events.DataEvent;
  5     import flash.events.Event;
  6     import flash.events.MouseEvent;
  7     import flash.events.ProgressEvent;
  8     import flash.net.FileFilter;
  9     import flash.net.FileReference;
 10     import flash.net.FileReferenceList;
 11     import flash.net.URLRequest;
 12     import flash.net.URLRequestMethod;
 13     import flash.net.URLVariables;
 14     import flash.text.TextField;
 15     import flash.text.TextFieldAutoSize;
 16     /**
 17     * ...
 18     * @author Frost.Yen
 19     */
 20     public class UploadListAS3 extends Sprite
 21     {
 22         private var _label:TextField;
 23         private var _button:TextField;
 24         private var _fileRefer:FileReferenceList;
 25         private var _count:int = 0;
 26         private var _request:URLRequest = new URLRequest("http://localhost/yanzimen/");
 27         public function UploadListAS3()
 28         {
 29             if(stage) init();
 30             else addEventListener(Event.ADDED_TO_STAGE,init);
 31         }
 32         private function init(e:Event = null):void
 33         {
 34             _label = new TextField();
 35             _label.text = "please select file";
 36             _label.autoSize = TextFieldAutoSize.LEFT;
 37             _label.background = true;
 38             _label.width = 300;
 39             _label.wordWrap = true;
 40             _label.backgroundColor = 0xffffff;
 41             _label.border = true;
 42             _button = new TextField();
 43             _button.text = "click here to select file";
 44             _button.autoSize = TextFieldAutoSize.LEFT;
 45             _button.selectable = false;
 46             _button.background = true;
 47             _button.backgroundColor = 0xE29966;
 48             _button.border = true;
 49             this.addChild(_label);
 50             this.addChild(_button);
 51             _button.x = 310;
 52
 53             _fileRefer = new FileReferenceList();
 54             _button.addEventListener(MouseEvent.CLICK,toSelect);
 55             _fileRefer.addEventListener(Event.SELECT,onSelect);
 56             _fileRefer.addEventListener(Event.CANCEL,onCancel);
 57         }
 58         private function toSelect(e:MouseEvent):void
 59         {
 60             _fileRefer.browse(); //browse(typeFilter:Array=null) 使用 typeFilter 参数,可决定对话框显示哪些文件。
 61             _button.removeEventListener(MouseEvent.CLICK,toSelect);
 62         }
 63         private function onProgress(e:ProgressEvent):void
 64         {
 65             _label.text = Number(Math.round(e.bytesLoaded / e.bytesTotal*100))+"%";
 66             //label.text = e.bytesLoaded+"/"+e.bytesTotal;
 67         }
 68         private function onComplete(e:Event):void
 69         {
 70             e.target.removeEventListener(Event.COMPLETE,onComplete);
 71             e.target.removeEventListener(ProgressEvent.PROGRESS,onProgress);
 72
 73             if(_count<_fileRefer.fileList.length-1){
 74                 _label.text = "load complete "+(_count+1)+" file";
 75                 _count++;
 76             }else{
 77                 _count=0;
 78                 _button.addEventListener(MouseEvent.CLICK,toUpload);
 79                 _label.text = "all files load complete!";
 80                 _button.text = "to upload";
 81             }
 82         }
 83         private function toUpload(e:MouseEvent):void{
 84             onUpLoad(_fileRefer.fileList[_count]);
 85         }
 86         private function onSelect(e:Event):void
 87         {
 88             _label.text = "";
 89             for(var i:int = 0;i<_fileRefer.fileList.length;i++){
 90                 trace("the name of the selected file:",_fileRefer.fileList[i].name);
 91                 _label.appendText("file "+(i+1)+":"+_fileRefer.fileList[i].name+"\n");
 92                 _fileRefer.fileList[i].addEventListener(Event.COMPLETE,onComplete);
 93                 _fileRefer.fileList[i].addEventListener(ProgressEvent.PROGRESS,onProgress);
 94                 (_fileRefer.fileList[i] as FileReference).load();
 95             }
 96         }
 97         private function onCancel(e:Event):void
 98         {
 99             trace("cancel to upload");
100             _button.addEventListener(MouseEvent.CLICK,toSelect);
101         }
102         /**
103          * 调用FileReference的实例方法upload()实现文件上传
104          * @param    file
105          */
106         private function onUpLoad(file:FileReference):void
107         {
108             _label.text = "file "+(_count+1)+" size"+Number(file.size/1024/1024).toFixed(2)+"M";
109             var variables:URLVariables = new URLVariables();
110             variables.fileName = file.name;
111             _request.data = variables;
112             _request.method = URLRequestMethod.POST;
113             file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
114             file.addEventListener(Event.COMPLETE, completeHandler);
115             file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeDataHandler);
116             try
117             {
118                 file.upload(_request);
119             }
120             catch(error:Error)
121             {
122                 trace(error.message);
123             }
124
125             function progressHandler(e:ProgressEvent):void
126             {
127                 _label.text = "file "+(_count+1)+" uploading "+Math.round(100 * e.bytesLoaded / e.bytesTotal) + "%";
128             }
129             function completeHandler(e:Event):void
130             {
131                 var file:FileReference = FileReference(e.target);
132                 file.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
133                 file.removeEventListener(Event.COMPLETE, completeHandler);
134                 _button.removeEventListener(MouseEvent.CLICK,toUpload);
135                 _button.addEventListener(MouseEvent.CLICK,toSelect);
136
137                 if(_count<_fileRefer.fileList.length-1){
138                     _label.text = "upload complete "+(_count+1)+" file";
139                     _count++;
140                     onUpLoad(_fileRefer.fileList[_count]);
141                 }else{
142                     _label.text = "all files upload complete";
143                     _button.text = "click here to select file";
144                 }
145             }
146             function completeDataHandler(e:DataEvent):void
147             {
148                 var file:FileReference = FileReference(e.target);
149                 file.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeHandler);
150                 if(_count==_fileRefer.fileList.length-1){
151                     trace("upload_complete_data",e.data);//上传成功后,从后台返回的数据
152                 }
153             }
154         }
155         /**
156          * FileFilter 类用于表示在调用 FileReference.browse() 方法、FileReferenceList.browse() 方法或调用 File、FileReference 或 FileReferenceList 对象的 browse 方法时显示的文件浏览对话框中显示用户系统上的哪些文件。
157          * @return
158          */
159         private function getImageTypeFilter():FileFilter {
160             return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
161         }
162
163         private function getTextTypeFilter():FileFilter {
164             return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf");
165         }
166     }
167 }
时间: 2024-10-29 19:07:19

[ActionScript3.0] 使用FileReferenceList处理多个文件上载的相关文章

【ActionScript】ActionScript3.0对舞台组件的增删改查

以一个例子来说明ActionScript3.0对舞台组件的增删改查 如下图: 在Flash运行的时候,通过脚本,斜向下生成text0-text9十个文本节点. 提供两个功能, 1.在右上角,用户输入要删除的节点,点击"删除"之后,而删除相应的文本节点. 2.在下方,用户输入要移动的节点,然后输入合法的X与Y,则可以把节点移动到相应的地方. 一.基本布局 1.首先新建一个ActionScript3.0的Flash文件.之后如同<[ActionScript]ActionScript3

【ActionScript】ActionScript3.0的Helloworld

虽然说ActionScript2.0与ActionScript3.0熟练使用任意一门都可以,但是ActionScript3.0带来了许多新的开发感受.新时代的Flash已经开始向ActionScript3.0转型,许多新的Flash框架与Flash资料都是基于ActionScript3.0.所以还是两门双修好勒.ActionScript2.0的Helloworld已经在<[ActionScript]ActionScript2.0的Helloworld>(点击打开链接)中介绍过了.下面开始介绍A

ActionScript3.0教你在影片剪辑中访问主场景中的变量

在ActionScript2.0中,影片剪辑访问主场景中的变量非常的简单,仅仅需要用一个带有_root的绝对路径即可. 然而在ActionScript3.0影片剪辑中访问主场景中的变量却没有那么容易,使用root将会报错.下面为大家介绍一种非常简单的方法来访问主场景中的变量. 方法如下: 1.在MC(影片剪辑实例名称)里定义一个变量father:Object; 2.在主场景代码中进行赋值 MC.father = this; 3.在影片剪辑里访问的时候就直接 father.变量名 就行.

System.Web.HttpCompileException (0x80004005): (0): error CS0016: 未能写入输出文件

重新系统后,iis asp.net站点老是出现: System.Web.HttpCompileException (0x80004005): (0): error CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\8a066f10\5b61ede0\App_Web_index.aspx.cdcab7d2.m4fr5omv.dll”--“拒绝访问. ” 第一感觉

DriveWorks Solo v8.2.0.137 x86+x64含授权文件\

Vero Machining Strategist v15.0.6 Win32_64 2CD Wolfram Mathematica v10.1.0 Windows-ISO 1DVD Wolfram SystemModeler v4.1.0 Windows 1CD  Autodesk.Sketchbook.Pro.for.EnterPrise.Multi.v2016.Win64 1CD 304\ CAXA.CAPP.2007.R3.官网正式版.(含Crack).iso CAXA.EB.2007.

ActionScript3.0(AS3)中的泛型数组Vector

Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处. 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS

原创教程“ActionScript3.0游戏中的图像编程”开始连载啦!

        经过近两年的不懈努力,笔者的原创教程“ActionScript3游戏中的图像编程”终于在今日划上了完美的句号!这当中记录着笔者多年来在游戏制作,尤其是当中图像处理方面的经验心得.虽然使用的语言是目前可能正在没落的ActionScript3.0,但由于其中渗透着深刻的编程思想和实用技巧,因此其意义已经远远超越了ActionScript本身.您可以把从本书学到的知识轻松移植到其他支持图像编程的开发语言中(我也想换个语言重写,可惜精力不足).         此外,本书还包含了一些颜色

Cocos2d-x 3.0 打造一个全平台概念文件夹

Cocos2d-x 3.0 打造一个全平台概念文件夹http:// www.eoeandroid.com/thread-328055-1-1.html

原创图书《ActionScript3.0游戏中的图像编程》开始连载啦!

        经过近两年的不懈努力,笔者的原创图书<ActionScript3游戏中的图像编程>终于在今日划上了完美的句号!这当中记录着笔者多年来在游戏制作,尤其是当中图像处理方面的经验心得.虽然使用的语言是目前可能正在没落的ActionScript3.0,但由于其中渗透着深刻的编程思想和实用技巧,因此其意义已经远远超越了ActionScript本身.您可以把从本书学到的知识轻松移植到其他支持图像编程的开发语言中(我也想换个语言重写,可惜精力不足).         此外,本书还包含了一些颜