【汇总】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,一经查实,立即删除!

相关文章

2018.3.24 struct

好了今天听完了struct,感觉也差不多了,后面的视频不想听了,io啊预处理啊什么的用时候现学就好了。主要是就这么光听却没有作业可做真的有点不爽。 明天开始15-213,反正手头也有c primer plus了,后面遇到什么问题看书就…

一直苦于没有好的资产管理软件,GLPI能解决吗?

一直苦于没有好的资产管理软件,正好看到网上文章有介绍glpi资产管理开源软件 在此做个记录,有时间一定要测试一下 (1)资产管理工具GLPI 官网 http://www.glpi-project.org/ GLPI是法语Gestionnaire libre de parc informatique的…

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的…

java语言模拟_Java语言模拟操作系统.doc

河北大学2010级操作系统课程设计论文PAGEPAGE 27装订线装订线(指导教师用表)学 生 姓 名指 导 教 师论文(设计)题目Java语言模拟操作系统主要研究(设计)内容使用java语言&#xff0c;采用多到程序设计方法基本上实现并模拟了单用户操作系统。该操作系统包括四部分内容&#xff…

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

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

485. Max Consecutive Ones

原题链接&#xff1a;https://leetcode.com/problems/max-consecutive-ones/description/ 这道题目级别为easy&#xff0c;实际做起来也是so easy&#xff1a; /*** Created by clearbug on 2018/2/26.*/ public class Solution {public static void main(String[] args) {Solu…

[转]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…

关于strassen矩阵乘法的矩阵大小不是2^k的形式时,时间复杂度是否还是比朴素算法好的看法...

原来是n&#xff0c;找到大于等于n且是2^k形式的数m。n*n的矩阵补全为m*m的矩阵&#xff0c;原来的矩阵放在最左上方&#xff0c;其它位置的值为0.朴素方法&#xff1a;n^3现在&#xff1a;m^2.8即m/n需小于e^(3/2.8)2.919才能好&#xff0c;而n<m<2*n&#xff0c;即使用…

UtilSession failed: Prerequisite check CheckSystemSpace space(22288172004) is not availa

如果你在使用OPatch打11.2 GI/CRS上的PSU时遇到了如上错误信息"UtilSession failed: Prerequisite check "CheckSystemSpace" space"则说明你的CRS_HOME所在文件系统的空闲空间不足22g&#xff0c;这会导致OPatch预检测无法通过。 UTIL session.Oracle…

数据库 oracle 设计三范式

一&#xff1a;表中的数据不能重复&#xff0c;每个字段不可再分。2&#xff1a; 建立在第一范式上&#xff0c;表中的非主键字段必须全部依赖主键&#xff0c;不能部分依赖主键3 建立在第二范式基础上的&#xff0c;非主键字段不能传递依赖于主键字段。转载于:https://www.cnb…

java websocket高并发测试_Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。...

本博文&#xff0c;保证不用装B的话语和太多专业的语言&#xff0c;保证简单易懂&#xff0c;只要懂JAVAEE开发的人都可以看懂。 本博文发表目的是&#xff0c;目前网上针对Websocket的资料太散乱&#xff0c;导致初学者的知识体系零零散散&#xff0c;学习困难加大。本博加以整…

C#实现文件下载代码

提供个C#实现文件下载代码  一&#xff0e;概述&#xff1a; 本文通过一个实例向大家介绍用Visual C#进行Internet通讯编程的一些基本知识。我们知道.Net类包含了请求/响应层、应用协议层、传输层等层次。在本程序中&#xff0c;我们运用了位于请求/响应层的WebRequest类以及W…

Cookie 与Session 的区别

Cookie 与Session 的区别&#xff08;转载&#xff09; 原地址: http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 两个都可以用来存私密的东西&#xff0c;同样也都有有效期的说法。 区别在于&#xff1a;session是放在服务器上的&#xff0c;过期与否取决于…

voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...

VoyageOverview采用Java实现的基于netty轻量的高性能分布式RPC服务框架。实现了RPC的基本功能&#xff0c;开发者也可以自定义扩展&#xff0c;简单&#xff0c;易用&#xff0c;高效。Features服务端支持注解配置客户端实现Filter机制&#xff0c;可以自定义Filter基于netty3.…

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

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

IOS 调用系统照相机和相册

/** * 调用照相机 */ - (void)openCamera { UIImagePickerController *picker [[UIImagePickerController alloc] init]; picker.delegate self; picker.allowsEditing YES; //可编辑 //判断是否可以打开照相机 if ([UIImagePickerController isSourceTypeAvailable:UIImag…

IDC机房KVM应用案例分析

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