- 浏览: 17088 次
最新评论
保存文本文件到本地(as3.0)(转)
- 博客分类:
- 技术杂绘
保存文本文件到本地(as3.0)(转)
2010年10月09日
在一般情况下,网页上的Flash是不能对客户端的文件进行操作的,包括读取和写入都不允许,即使借助于JS,也一样会因为浏览器的安全设置而被禁止.Flash 8的诞生貌似可以让想实现本地读写的朋友们绝处逢生,因为可以从FileReference类里打开本地文件浏览对话框,第一感觉就是Flash可以对本地文件进行操作了!!可惜的是,这个框纯为上传而设,不过相当于一个网页的文件域而已.甚至连文件路径都不能为FlashPlayer所获取.更不用谈直接操作了.尽管可以用JS来获得文件路径,Flash也无法获得文件里面的数据.尽管如此,Flash 8也可以做出一个本地图片浏览器,其途径是通过浏览文件,上传到服务器后,再重新传输到本地进行浏览.这个在Flash 8的安装目录下有官方的范例.这个本地图片浏览器的过程是可逆的,就是说,本来在Flash里的图片,可以提交到服务器端,生成图片文件,再通过FileReference类下载到本地.
我这次所制作的文本编辑器的运行过程同样是官方图片浏览器的逆过程.既然Flash里的文本无法直接保存到本地(SharedObject不算),我们也可以通过提交数据到服务器端,生成文件,再下载.所以,整个过程就是:输入文本->提交->服务器端保存文件->下载服务器端文件到本地 这么看起来,似乎已经绕过了安全防线而实现所需的操作,不过,Flash还是把关很严滴,不可以设置默认的下载位置,而且下载前必须显示系统对话框.
因为论坛的贴是在AS3版块提问的,所以文件也是AS3的,我将用AS3写这个教程.不过,像这种应用,用AS1写也绰绰有余啦,加上本人比较懒,这次AS就写时间轴上算了.
讲完大致思路以后,就可以给出做法:
1 新建一个flash文档(AS3.0),然后打开组件面板,往舞台拖入一个TextArea组件和Button组件,实例名分别为input_txt和submit_btn.
2 然后就可以写时间轴代码了(就不分块来写了,大家看注释就好).
//这里导入所需的类(其实如果在时间轴上写,有很多是可以省掉的)
//既然要用到下载,这当然必不可少啦
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
路径赋予该变量
dim fileName
fileName=Request("fileURL")
'在服务器上寻找该文件,如果存在的话
if fso.fileExists(Server.mapPath(fileName)) then
'就将其删除
fso.deleteFile Server.mapPath(fileName)
end if
%>
PHP版本的代码(注释加不加也差不多了,原理跟ASP的没啥两样)
makeFile.php
路径给回Flash端
echo $fdrName."/".$fileName;
?>
deleteFile.php
发表评论
-
我的ATL/ADO编程的曲折经历
2012-01-20 02:41 858我的ATL/ADO编程的曲折经 ... -
nosql生态系统
2012-01-20 02:41 772nosql生态系统 2011年06月 ... -
怎样采集淘宝宝贝的用户评价信息
2012-01-20 02:41 1092怎样采集淘宝宝贝的用户评价信息 2011年03月15日 ... -
绩效考核制度-KPI关健绩效目标考核
2012-01-19 10:24 712绩效考核制度-KPI关健绩 ... -
现场品管工作
2012-01-19 10:24 644现场品管工作 2010年10 ... -
Flex面试题及答案
2012-01-19 10:24 645Flex面试题及答案 2011年 ... -
flash音乐播放器 制作教程
2012-01-19 10:24 897flash音乐播放器 制作教程 2011年09月24日 ... -
驱动之路-内存管理机制及mmap方法
2012-01-17 03:05 605驱动之路-内存管理机制 ... -
Windows内存出错的几个解决方案2
2012-01-17 03:04 489Windows内存出错的几个解决方案2 2011年07月17 ... -
内存映射与DMA笔记
2012-01-17 03:04 1063内存映射与DMA笔记 2011 ... -
内存指令00报错
2012-01-17 03:04 610内存指令00报错 2010年07月16日 内存不能为re ... -
了解进程中的内存结构
2012-01-17 03:04 553了解进程中的内存结构 ... -
指导学生批改作文应把握哪些内容?
2012-01-16 01:38 796指导学生批改作文应把 ... -
对优秀老师的备课、作业批改等的评语
2012-01-16 01:38 1419对优秀老师的备课、作 ... -
作文批改要求与方法
2012-01-16 01:38 726作文批改要求与方法 20 ... -
作文批改也要创新。
2012-01-16 01:37 536作文批改也要创新。 2010年10月13日 ... -
难忘的作文评语
2012-01-16 01:37 704难忘的作文评语 2011年03月26日 双 ... -
asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站
2012-01-11 01:12 651asp.net 异步群发邮件时遭遇到的问题 ddddddddd ... -
在继承中的异常
2012-01-11 01:11 573在继承中的异常 2011年09月01日 public i ... -
Overview of DBA Cockpit for Oracle
2012-01-11 01:11 660Overview of DBA Cockpit for Ora ...
相关推荐
今天小编就为大家分享一篇关于使用JavaScript保存文本文件到本地的两种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
//AS3将文本文件保存到本地 仅5行代码 多么简单 import flash.net.FileReference; var fileRef:FileReference = new FileReference();
本手册为在 ActionScript™ 3.0 中开发应用程序提供了基础。为了充分理解所介绍的理念和 技巧,您应已熟悉了一般的编程概念,如数据类型、变量、循环和函数。您还应了解面向对 象编程的基本概念,如类和继承。如果...
as3.0富文本,可以插入表情图片,图文并排,非常实用,将对应的swc导入即可用
非FLEX组件。纯AS3代码实现。只需传入数组,数据就会以下拉菜单的形式显现
as3.0通过XML动态加载外部图片实例,源文件源代码提供。可更换图片。
实现打开本地文件夹,加载视频,已经保存文本到本地文件夹,等功能~
AS3.0 TLFTextField 最新的组件库 以往的有BUG,这个可是最新的哦 package { import fl.controls.UIScrollBar; import fl.text.TLFTextField; import flash.events.Event; import flashx.textLayout....
Flash,AS3.0教程-代码的位置精选.doc
从最初下载的火山动态文本滚动条V5到现在的版本,优化了很多,也改了些小bug,目前版本不能说非常完美但也自认为很棒了。 今天我就将多年的成果贡献出来,让大家借鉴或批评^_^,今天我还完善了一下,以后我还会继续...
文本整理器是一款针对中文文章格式而设计的文本编辑软件。对一篇格式不规范的文章,只需点击几个按钮,就可把它整理成规范格式。它提供了大量实用的整理工具,可满足各种不同的整理要求,使你从繁琐的修改工作中摆脱...
连线题是课件中常用的一种应用,本例可做各种推广使用。本示例为纵向物理定律与相关解释文本间的连线题,初高中课本中常见题型。
C#保存txt,生成文本文档,这个资源本人因为项目需要,才捣鼓出来,欢迎大家下载
文本整理器是一个可以对文本文档进行快速文字编辑的文本处理工具。 适用操作系统:Window 2000/XP等 最佳屏幕分辨率:1024×768 开发语言:VC++6.0 目录: 1、对空格的整理 2、对段落和空行的整理 3、对标点符号...
文本整理器,强大的文本整理功能,基本能解决文本文件的格式问题。
读取文件中的二进制文件并将二进制转换成文本文档并输出
Android中实现保存和读取文本文件到内部存储器(实现简易的记事本为例)示例代码.zip Android中实现保存和读取文本文件到内部存储器(实现简易的记事本为例)示例代码.zip Android中实现保存和读取文本文件到内部存储器...
文本整理器是一款针对中文文章格式而设计的文本编辑软件。对一篇格式不规范的文章,只需点击几个按钮,就可把它整理成规范格式。它提供了大量实用的整理工具,可满足各种不同的整理要求,使你从繁琐的修改工作中摆脱...
做了一个小工具,unity下载服务器文件,然后打开对话框保存到本地