//这里导入所需的类(其实如果在时间轴上写,有很多是可以省掉的) //既然要用到下载,这当然必不可少啦 import flash.net.FileReference; //数据通过URLLoader和URLRequest提交 import flash.net.URLLoader; import flash.net.URLRequest; //这个拿来写Post方法,用这个类导入常数 import flash.net.URLRequestMethod; //本来用String来提交数据就可以的了,但是感觉用了这个东西,代码看上去有水平点,呵呵. import flash.net.URLVariables; //都怪那个组件字体,默认是10号字,非要我用样式来重新设置一下,否则中文会看不清楚 import flash.text.TextFormat; //事件太多了,懒得再一个个地去添加 import flash.events.*; //跟下面一句有关系啦(为防止乱码而设的了) import flash.system.System; System.useCodePage=true; //这里给按钮和文本设置字体样式,当然也可以用global全局设置,结果显示12号字 var tf:TextFormat=new TextFormat(); tf.size=12; input_txt.setStyle("textFormat",tf); submit_btn.setStyle("textFormat",tf); //点击提交(保存)按钮后,响应一个函数 submit_btn.addEventListener(MouseEvent.CLICK,clickHandler); //点击按钮后调用 function clickHandler(event:MouseEvent):void { //该函数是提交数据的核心函数(说的好像很高深,其实比较简单,看下去就知道了) submitData(); //这是测试的时候突然发现,如果网速慢的话,不停点按钮容易出错 submit_btn.enabled=false; } function submitData():void { //创建URLLoader实例 var urlL:URLLoader=new URLLoader(); //创建URLRequest实例,意味着提交的数据传输到makeFile.asp(之后我会再放一个PHP版本的),如果用PHP的话,读者把这个文件名改改就好了. //这里解释下makeFile.asp的作用(因为还没有发后台程序,所以先讲下功能,就是通过服务器的FSO对象,把提交的数据保存到一个文本文档 中,文件名为当前时间加上一个随机数,这样的文件名可以防止多人同时提交时,由于文件名相同而导致冲突,如果觉得这样还是容易重复,可以在文件名里加上 IP地址.这个文件名会传回来给SWF,然后由FileReference获得这个文件名并下载到本地 var urlR:URLRequest=new URLRequest("makeFile.asp"); //考虑到用户可能会输入乱七八糟或者数量较多的字符,用get方法传递不太合适,所以用post urlR.method=URLRequestMethod.POST; //之前说了,使用URLVariables只是为了看上去代码有水平点,可以用String来传递数据. var urlV:URLVariables=new URLVariables(); //提交一个变量saveData到后台,值就是用户输入的文本 urlV.saveData=input_txt.text; //让URLRequest要传递的数据和URLVariables关联上 urlR.data=urlV; //提交数据,发送请求 urlL.load(urlR); //监听完成事件,进行后续操作 urlL.addEventListener(Event.COMPLETE,completeHandler); } //下面是FileReference var fileR:FileReference=new FileReference(); //这堆事件是帮助文件说一定要定义的,如果使用download方法的话,那就听下Adobe的话,都定义下吧. fileR.addEventListener(IOErrorEvent.IO_ERROR,errHandler); fileR.addEventListener(Event.CANCEL,operateHandler); fileR.addEventListener(Event.OPEN,operateHandler); fileR.addEventListener(ProgressEvent.PROGRESS,operateHandler); fileR.addEventListener(Event.COMPLETE,operateHandler); fileR.addEventListener(Event.Select,operateHandler); fileR.addEventListener(SecurityErrorEvent.SECURITY_ERROR,operateHandler); fileR.addEventListener(HTTPStatusEvent.HTTP_STATUS,operateHandler); //这个变量用于存储远程保存的文本文件的地址 var fileURL:String; //数据提交完成以后响应 function completeHandler(event:Event):void { //文件路径由服务器端传过来,至于如果传的,等下看后台文件. fileURL=event.target.data //获得文件路径以后,下载到本地,默认的文件名是myText.txt,当然,这个你可以改,或者就用远端文件的名称 fileR.download(new URLRequest(fileURL),"myText.txt"); } //fileReference发生错误(IOError)时调度 function errHandler(event:*):void { trace("error"); } //这个函数用于处理那一堆被迫定义的事件 function operateHandler(event:*):void { switch(event.type){ case "complete": //这里再一次做URLLoader,目的何在?其实就是把下载完的文件从服务器端删除,以释放服务器的空间,但是我们不能在前面的ASP里删除,必须要等到现在下载完成了才可以. var urlL:URLLoader=new URLLoader(); //deleteFile.asp的作用:删除之前保存在服务器上的文本文档 var urlR:URLRequest=new URLRequest("deleteFile.asp?fileURL="+fileURL); urlL.load(urlR); //这个纯粹形式 urlL.addEventListener(Event.COMPLETE,deleteHandler); case "cancel": //因为提交的时候屏蔽了提交按钮,所以用户点取消或者传输完成(其实有错误也应该写在这里),都重新恢复提交按钮的可用性 submit_btn.enabled=true; } } function deleteHandler(event:Event):void{ //就是比较形式地把这个函数写一下 } |
然后,发布一下SWF和HTML,再创建两个ASP文件,放在跟HTML同一个目录下
makeFile.asp
<% deletefile.asp <% PHP版本的代码(注释加不加也差不多了,原理跟ASP的没啥两样) makeFile.php <? deleteFile.php <? |
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |