【汇总】flash单个文件上传

之前有朋友给我发送email,询问我是否有单个文件上传的源代码,因为当时写这个好像是在09年,所以放哪了一时也没找着。后来整理硬盘的时候,找到了源码,所以决定来个汇总(之前写过的关于flash+js上传文件的例子):

1、定位flash上传出现IO Error #2038的错误

2、as3+php上传图片的三种方式

3、as3与php 上传单个图片demo

4、as3与php 上传多张图片demo

5、51JS上的“[原创] flash单个文件上传代码+示例”

在这里面,我决定把所有的源码:html、js、php、fla、as3以及使用说明一并打包,并直接提供下载。

 

先还是讲一下flash按钮的控制问题:

1)、需要三张图片,新建一个影片剪辑,也就是按钮的三种状态:正常、hover、disabled,如下图所示(三种状态的图片,分别位于第一帧、第二帧和第三帧,每一帧上写上脚本stop())

image

2)、在库中右击选中刚刚的btn(影片剪辑),然后右击选择“属性”,勾选“为第一帧导出”以及“为ActionScript导出“,如图所示:

image

3)、编写类UploadButtonCom类,它继承于基类MovieClip,目的是为了方便调用者直接调用一个方法便可很方便地控制按钮的状态,比如:mouseover、mouseout等

UploadButtonCom类的完整代码如下:

   1: package
   2: {
   3:     import flash.display.MovieClip;
   4:     import flash.events.MouseEvent;
   5:     
   6:     public class UploadButtonCom extends MovieClip
   7:     {
   8:         public function UploadButtonCom()
   9:         {
  10:             super();
  11:             init();
  12:         }
  13:         
  14:         private function init():void
  15:         {
  16:             enabledButton();
  17:             this.addEventListener(MouseEvent.MOUSE_OVER , overHandle);
  18:             this.addEventListener(MouseEvent.MOUSE_OUT  , outHandle)
  19:         }
  20:         
  21:         private function overHandle(e:MouseEvent):void
  22:         {
  23:             this.gotoAndStop(2)    
  24:         }
  25:         
  26:         private function outHandle(e:MouseEvent):void
  27:         {
  28:             this.gotoAndStop(1)
  29:         }
  30:         
  31:         public function disenable():void
  32:         {
  33:             this.gotoAndStop(3);
  34:             this.buttonMode = false
  35:             this.mouseChildren = false;
  36:             this.mouseEnabled  = false
  37:         }
  38:         
  39:         public function enabledButton():void
  40:         {
  41:             this.gotoAndStop(1);
  42:             this.buttonMode = true
  43:             this.mouseChildren = true;
  44:             this.mouseEnabled  = true            
  45:         }
  46:     }
  47: }

提供给外部仅二个方法来控制按钮是否可以被点击。

4)、从库中将“按钮”这个MovieClip拖至舞台中,指定一个名称“btn_mc“,编写一个文档类“UploadFile.as”

   1: package
   2: {
   3:     import flash.display.MovieClip;
   4:     import flash.events.DataEvent;
   5:     import flash.events.Event;
   6:     import flash.events.IOErrorEvent;
   7:     import flash.events.MouseEvent;
   8:     import flash.events.ProgressEvent;
   9:     import flash.external.ExternalInterface;
  10:     import flash.net.FileFilter;
  11:     import flash.net.FileReference;
  12:     import flash.net.URLRequest;
  13:     import flash.text.TextField;
  14:     
  15:     public class UploadFile extends MovieClip
  16:     {
  17:         public function UploadFile()
  18:         {
  19:             super();
  20:             init();
  21:         }
  22:         
  23:         private var tipTxt:TextField;
  24:         private var uploadButton:UploadButtonCom;
  25:         
  26:         private var file:FileReference;
  27:         private var fileType:String = '*.*';
  28:         private var fileTypeStr:String = 'All Files'
  29:         private var fileMaxSize:Number = 10*1024; 
  30:         private var uploadURL:String = '';
  31:         private static var CALL_FUNCTION_NAME = "SWFSingleUpload.instance.";
  32:         
  33:         private function init():void
  34:         {
  35:             tipTxt = this.txt_mc;
  36:             tipTxt.mouseEnabled = false;
  37:             tipTxt.mouseWheelEnabled = false;
  38:             tipTxt.selectable = false;
  39:             
  40:             uploadButton = this.btn_mc;
  41:             uploadButton.addEventListener(MouseEvent.CLICK , browseFile);
  42:             
  43:             addJScall();
  44:             this.addEventListener(Event.ADDED_TO_STAGE , createComplete);
  45:                         
  46:             file = new FileReference();
  47:             file.addEventListener(Event.SELECT, selectHandler);
  48:             file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  49:             file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
  50:             file.addEventListener(Event.COMPLETE, completeHandler);
  51:             file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,dataHandler);
  52:         }
  53:                 
  54:         private function createComplete(e:Event):void
  55:         {
  56:             ExternalInterface.call(CALL_FUNCTION_NAME + "initComplete");
  57:         }
  58:         
  59:         private function addJScall():void
  60:         {
  61:             ExternalInterface.addCallback("setValue",setValue);
  62:         }
  63:         
  64:         private function setValue(t:String,_fileType:String,_fileTypeStr:String,fileMax:Number,url:String):void
  65:         {
  66:             tipTxt.htmlText = t;
  67:             fileMaxSize = fileMax;
  68:             fileType    = _fileType;
  69:             fileTypeStr = _fileTypeStr;
  70:             uploadURL   = url;
  71:         }
  72:         
  73:         private function startUploadFile():void
  74:         {
  75:             if(file.size/1024 > fileMaxSize)
  76:             {
  77:                 ExternalInterface.call(CALL_FUNCTION_NAME + "limitError","文件超出最大限制");
  78:                 return ;
  79:             }
  80:             ExternalInterface.call(CALL_FUNCTION_NAME + "startUpload");
  81:             uploadButton.disenable();
  82:             var uploadReq:URLRequest = new URLRequest(uploadURL)
  83:             file.upload(uploadReq);
  84:         }
  85:                 
  86:         private function selectHandler(e:Event):void
  87:         {
  88:             startUploadFile();
  89:         }
  90:         
  91:         private function browseFile(e:Event):void
  92:         {
  93:             var fileFilter:FileFilter = new FileFilter(fileTypeStr, fileType);
  94:              file.browse([fileFilter]);
  95:         }
  96:         
  97:         private function ioErrorHandler(e:IOErrorEvent):void
  98:         {
  99:             ExternalInterface.call(CALL_FUNCTION_NAME + "ioError",e.text);
 100:             uploadButton.enabledButton();
 101:         }
 102:         
 103:         private function progressHandler(event:ProgressEvent):void
 104:         {
 105:             ExternalInterface.call(CALL_FUNCTION_NAME + "progress",event.bytesLoaded,event.bytesTotal);            
 106:         }
 107:         
 108:         private function completeHandler(e:Event):void
 109:         {
 110:             ExternalInterface.call(CALL_FUNCTION_NAME + "uploadComplete");
 111:             uploadButton.enabledButton();
 112:         }
 113:         
 114:         private function dataHandler(data:DataEvent):void
 115:         {
 116:             ExternalInterface.call(CALL_FUNCTION_NAME + "uploadSuccess",data.data);
 117:         }
 118:     }
 119: }

 

之后,我在此基本上封装了一层,写了一个名为“swf_single_upload.js”的JS文件,主要目的是为了方便调用者使用它。

主要包含如下内容:

函数定义:(仅提供给网页调用的接口,与flash无关)
new SWFSingleUpload({
    flash_url : "",//上传文件的URL地址
    upload_url : "",//文件上传的目标地址
    post_params : "",//传递的参数
    file_size_limit : "",//文件上限,默认为;10*1024(以字节为单位)
    file_types : "",//文件类型,以;进行分隔,例如:*.jpg;*.png
    file_types_description : "",//文件上传的描述文字,例如:图片
    debug : true,//是否显示调试信息
    upload_panel_id : "",//上传按钮放置的文件
    upload_btn_text : "",//上传按钮的文字
    upload_loaded_handler : "",//上传组件初始化完成
    upload_start_handler : "",//开始上传的处理方法
    upload_progress_handler : "",//正在上传时的方法
    upload_complete_handler : "",//上传完成的方法
    upload_success_handler : "",//上传成功的方法
    upload_error_handler : ""//上传发生错误调用的方法
);
总共有15个参数
    获取组件的版本号:SWFSingleUpload.version
    获取组件实例对象:SWFSingleUpload.instance指向实例本身
    组件当前swf对象:this.swfObject
    其它全部采用回调的机制进行操作,其中错误信息有:   
        1、超过指定的大小
        2、其它的IO错误,例如404或是其它

Flash与JS调用的方法说明:
Flash调用JS以SWFSingleUpload.instance.方法名开头
默认限制上传文件类型为:*.* 说明为All Files 最大上传的文件大小为10*1024字节

Flash提供setValue方法给JS调用,以便传入上述参数。
this.addEventListener(Event.ADDED_TO_STAGE,createComplete);//flash初始化完成

flash调用JS的四个方法:
//文件超出最大上限
ExternalInterface.call(CALL_FUNCTION_NAME + "limitError","文件超出最大限制");
//上传进度
ExternalInterface.call(CALL_FUNCTION_NAME,"progress",event.bytesLoaded,event.bytesTotal);
//上传完成
ExternalInterface.call(CALL_FUNCTION_NAME + "uploadComplete");
//上传成功
ExternalInterface.call(CALL_FUNCTION_NAME,"uploadSuccess",data.data);
//上传出现IO错误
ExternalInterface.call(CALL_FUNCTION_NAME + "ioError",e.text);

 

页面正常运行,选择文件(以图片为例),示意图如下:

image

 

本想在新浪的SAE上部署测试一下,可是上传那一块失败了,也就没再继续折腾下去了。还是放一个地址,在线查看示例>>

 

本示例中所有完整的源代码下载>>

 

未经本人授权,本文谢绝转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weka的java环境配置_windows下安装和配置Weka

Weka是一款免费的,非商业化的,基于java环境下的开源的机器学习以及数据挖掘软件。Weka里含有各种数据挖掘工具:数据预处理,分类与回归,聚类,关联规则和可视化工具。一、安装weka我们首先需要到weka官网上下…

Windows部署服务WDS实例

一&#xff1a;概述<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Windows&#xff08;Windows Deployment Services&#xff09; 部署服务适用与大中型网络中的计算机操作系统部署。可以使用 Windows 部署服务来管理映像以及无…

JAVA----爬虫(一)JSoup

jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 官方api:https://jsoup.org/ 一、jsoup功能 简单的例子&#xff1a;抓取wiki的…

极速理解设计模式系列:22.状态模式(State Pattern)

四个角色&#xff1a;抽象状态类(State)、具体状态类(ConcreateState)、情景类(Context)、客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为。 具体状态类(ConcreateState):实现这个行为&#xff0c;实现一个状态。 情景类(Context):维护一个State的实例对象…

[转]extern使用方法总结

Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记&#xff1a;声明可以多次&#xff0c;定义只能一次。在使用中&#xff0c;要形成一种风格。 函数的声明extern关键词是可有可无的&#xff0c;因为函数本身不加修饰的话就是extern的。但是引用的时候一样是…

java 设置pdf 编码格式_Java如何设置PDF文档背景色详解

前言一般生成的PDF文档默认的文档底色为白色&#xff0c;我们可以通过一定方法来更改文档的背景色&#xff0c;以达到文档美化以及保护双眼的作用。 以下内容提供了Java编程来设置PDF背景色的方法。包括&#xff1a;设置纯色背景设置图片背景使用工具Spire.PDF for Java 2.0.3J…

产品架构开发方法(2011中国软件技术大会)

上周末在国家会议中心举办的2011中国软件技术大会上我做了一个分享&#xff1a;产品架构开发方法。很高兴能在不同的大会上做演讲&#xff0c;但更高兴的是能够结交更多的朋友。 这个演讲内容包括了企业架构、业务分析、软件产品线、产品管理等内容&#xff0c;知识量有点大哦。…

IDC机房KVM应用案例分析

IDC机房KVM应用案例分析<?xml:namespace prefix"o">?xml:namespace>一、背景介绍随着信息技术的发展&#xff0c;各行各业都在马不停蹄的开展着各自的信息化建设步伐。对于设计制造创新科技产品为运行主业的设计院而言&#xff0c;内部IT基础设备与机房管…

java跟踪会话_JavaWeb会话跟踪

cookie和session是常用的会话跟踪技术cookie机制1、web应用程序是使用HTTP协议传输数据的&#xff0c;HTTP协议是无状态的协议&#xff0c;一旦数据交换完毕就会关闭链接。Cookie可以弥补HTTP协议无状态的不足。位于&#xff1a;javax.servlet.http.Cookie2、Cookie具有不可跨域…

教你用身份证号查社保卡号 个人电脑号

适用前提&#xff1a;在广东省内交社保 用身份证查社保号第一步 登录广东社保局网站 广东社保局网站 在“全省个人养老保险信息查询“框输入你的身份证号码 这时要密码&#xff0c;面此要注册&#xff0c;注册时那红星星不用理会&#xff0c;除了姓名其他乱填即可&#xff0c;这…

X3D.Studio编辑器界面介绍

2019独角兽企业重金招聘Python工程师标准>>> X3DStudio编辑器的界面可分为【菜单栏】、【属性栏】、【显示栏】和【对象信息栏】四大部分。如下图所示。 X3D.Engine 通用虚拟现实引擎安装包下载地址&#xff1a;http://www.x3dengine.cn/Download.aspx 技术支持QQ群…

php 三方即时通讯_php即时通讯解决方案-请问PHP能否实现即时通讯?

最简单的说&#xff0c;它可以定期刷新&#xff0c;比如10秒的间隔。新数据&#xff0c;反馈到前台&#xff0c;没有新数据等待下次刷新。但实际上在应用中需要考虑消息的及时性、服务器压力等。php即时通讯。可以用comet来设计节点。js、socketphp即时通讯系统。总之&#xff…

php fopen插入文本_PHP 文件创建/写入

在项目中&#xff0c;我们在服务器上面操作文件&#xff0c;是一件非常频繁的事情。比如用户的投票的数据写入到txt文档中&#xff0c;缩略图上传&#xff0c;文件上传&#xff0c;及文件移动等等操作都离不开PHP 文件创建/读写/上传(上传我将会在下一节中讲到)。PHP 创建文件 …

【原译】在amazon kindle上安装Metasploit

免责申明&#xff08;必读&#xff01;&#xff09;&#xff1a;本博客提供的所有教程的翻译原稿均来自于互联网&#xff0c;仅供学习交流之用&#xff0c;切勿进行商业传播。同时&#xff0c;转载时不要移除本申明。如产生任何纠纷&#xff0c;均与本博客所有人、发表该翻译稿…

这就是搜索引擎:核心技术详解

这就是搜索引擎&#xff1a;核心技术详解张俊林 著ISBN 978-7-121-14865-12012年1月出版定价&#xff1a;45.00 元16开320页宣传语&#xff1a;改变全世界人们生活方式的“信息之门”内 容 简 介搜索引擎作为互联网发展中至关重要的一种应用&#xff0c;已经成为互联网各个领域…

php yii 控件分页,Yii2分页的使用及其扩展方法详解

前言&#xff1a;说明下我们本篇文章都要讲哪些内容分页的使用&#xff0c;一步一步的教你怎么做分页类LinkPager和Pagination都可以自定义哪些属性分页类LinkPager如何扩展成我们所需要的第一步&#xff0c;我们来看看yii2自带的分页类该如何去使用&#xff1f;1、controller …

charles修改响应体

一.修改响应体&#xff08;只要勾选了主导航Tools--rewrite之后&#xff0c;则请求会一直被修改&#xff09; 目的&#xff1a;需要测试数据为空&#xff0c;为纯英文&#xff0c;纯数字等多种情况&#xff0c;为了不麻烦后端的技术人员一支来配置&#xff0c;那么咱们就可以改…

HW—词频统计

第一次个人作业——词频统计 第一次做这种大作业&#xff0c;明显感觉陌生&#xff0c;各种规范和技能也是第一次使用&#xff0c;希望自己好运。 目录&#xff1a;一、基本要求 二、需求分析及时间估计 三、实现思路及过程 四、测试用例、时间性能分析及改进方法 五、经验总结…

oFono安装和启动

安装和启动oFono 1. git clone git://git.kernel.org/pub/scm/network/ofono/ofono.git 2. cd ofono 3. ./bootstrap-configure 或者./configure. configure过程中你可以需要装一些依赖包, 如&#xff1a; sudo apt-get install libudev-dev libdbus-1-dev libcap-ng-dev libto…

全排列问题(递归)

上次上课老师讲了全排列算法&#xff0c;现在刚刚看自己的写的全排列算法&#xff0c;看了好一会才看懂。。。。 应该是自己理解的不够彻底 所以今天彻彻底底的来分析一下 先看图&#xff1a; 思路&#xff1a; 先固定一个字符&#xff0c;然后将固定的字符与它后面的每一个进行…