`
manyinjin
  • 浏览: 92410 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flash 文件上传组件

阅读更多
朋友有个要求是要在页面上上传文件的时候只能选择指定类型(后缀名)的文件,显然<input type=file/>是无能为力的(至少我没有找到办法,想来javascript/DOM也没有这种能力),所以考虑用Flash做一个小组件。
调用方式如下:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
		id="upload_swf" width="650" height="220"
		codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
		<param name="movie" value="images/FileUpload.swf" />
		<param name="quality" value="high" />
		<param name="bgcolor" value="#76b900" />
		<param name="allowScriptAccess" value="sameDomain" />
//此处向Flash传入自定义变量,注:sessionId是必须的,貌似是Flash的一个Bug
		<param name="FlashVars" value='sessionId=<%=session==null?"":session.getId()%>&uploadPath=datarecover.do&fileFilter=[{"name":"Word", "postFix": "*.doc"},{"name":"CSV File", "postFix": "*.csv"}]'/>
		<embed src="images/FileUpload.swf" quality="high" bgcolor="#76b900"
			width="650" height="220" name="upload_swf" align="middle"
			play="true"
			loop="false"
			quality="high"
			allowScriptAccess="sameDomain"
			type="application/x-shockwave-flash"
			pluginspage="http://www.adobe.com/go/getflashplayer"
//此处向Flash传入自定义变量,注:sessionId是必须的,貌似是Flash的一个Bug	
	FlashVars='sessionId=<%=session==null?"":session.getId()%>&uploadPath=datarecover.do&fileFilter=[{"name":"Excel", "postFix": "*.xls"},{"name":"CSV File", "postFix": "*.csv"}]'>
		</embed>
</object>

源代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" width="100%" height="100%" >
	<mx:Script>
	<![CDATA[
		import mx.rpc.events.ResultEvent;
		import mx.collections.ArrayCollection;
	    import mx.controls.Alert;
		import mx.utils.ObjectUtil;
		import flash.events.*;
	    import flash.net.FileReference;
	    import flash.net.URLRequest;
	    import flash.net.FileFilter;
	    import com.adobe.serialization.json.JSON;

	    private var fileRef:FileReference;
	    private var sessionId:String;
	    private var fileFilter:Array;
	    private var uploadPath:String;
	    
	    
        private function initApp():void {
        	sessionId = Application.application.parameters.sessionId;
        	var ff:String = String(Application.application.parameters.fileFilter);
        	fileFilter = JSON.decode(ff) as Array;
        	uploadPath = Application.application.parameters.uploadPath;
            fileRef = new FileReference();
            fileRef.addEventListener(Event.CANCEL, traceEvent);
            fileRef.addEventListener(Event.COMPLETE, completeEvent);
            fileRef.addEventListener(Event.SELECT, selectEvent);
            fileRef.addEventListener(IOErrorEvent.IO_ERROR, traceEvent);
            fileRef.addEventListener(Event.OPEN, traceEvent);
            fileRef.addEventListener(ProgressEvent.PROGRESS, progressEvent);
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent);
        }
		
		private function traceEvent(event:Event):void {
			//var tmp:String = "";
			//ta.text += tmp + event.type + " event:" + mx.utils.ObjectUtil.toString(event) + "\n" ;
			//ta.verticalScrollPosition += 20;
		}
		
		private function ioErrorEvent(event:IOErrorEvent):void{
			Alert.show("IOError:"+event.type+":" + event.text);
			traceEvent(event);
		}
		
		private function selectEvent(event:Event):void{
			btn_upload.enabled = true;
			traceEvent(event);
			filename.text = fileRef.name;
			progressBar.setProgress(0, 100);
			progressBar.label = "Loading 0%";			
		}
	
		private function progressEvent(event:ProgressEvent):void {
			progressBar.setProgress(event.bytesLoaded, event.bytesTotal);
			traceEvent(event);
		}
	
		private function completeEvent(event:Event):void {
			progressBar.label = "Complete.";
			filename.text += " uploaded";
			traceEvent(event);
			btn_upload.enabled = false;
			btn_cancel.enabled = false;			
		}
		
		private function uploadFile():void {
			var endpoint:String = uploadPath;
			endpoint += ";jsessionid="+sessionId;
			endpoint +="?fileType="+fileRef.type;
			var req:URLRequest = new URLRequest(endpoint);
			req.method = URLRequestMethod.POST;
			fileRef.upload(req, "filedata", false);
			progressBar.label = "Uploading...";		
			btn_cancel.enabled = true;
		}
		
		private function browseFile():void {
			var filters:Array = [];
			for(var i:int = 0; i < fileFilter.length; i++) {
				var filter:Object = fileFilter[i];
		        filters.push(new FileFilter(filter.name, filter.postFix));
			}
			fileRef.browse(filters);
		}
	]]>
	</mx:Script>
	<mx:Panel title="Upload File" width="600" height="170" layout="vertical" horizontalCenter="0">
		<mx:Form height="125" width="572">
			<mx:FormItem label="Selected File:" width="520">
			    <mx:Label id="filename" width="402"/>
			</mx:FormItem>

			<mx:FormItem direction="horizontal" width="520">
				<mx:Button width="80" label="Browse" click="browseFile()" />
				<mx:Button width="80" label="Upload" id="btn_upload" enabled="false" click="uploadFile()" />
				<mx:Button width="80" label="Cancel" id="btn_cancel" enabled="false" click="fileRef.cancel()" />
			</mx:FormItem>
			
			<mx:HRule width="520" tabEnabled="false"/>
			
			<mx:FormItem label="Progress:" width="521">
				<mx:ProgressBar id="progressBar" mode="manual"  width="427"/>
			</mx:FormItem>		
		</mx:Form>		
	</mx:Panel>	
</mx:Application>
  • FileUpload.rar (287.4 KB)
  • 描述: 这个是编译完成之后的swf文件
  • 下载次数: 762
5
0
分享到:
评论
2 楼 523276508 2008-11-29  
源码都发上来就好了
1 楼 ntcso 2008-05-23  
我是初学者,请问,能不能做一个全部上纯FLASH的上传,或者是管理文件的,不需要任何HTM,PHP,ASP,等网页文件。直接一个SWF文件!

相关推荐

    flash文件上传组件

    【标题】:“Flash文件上传组件”是一种用于网页中的文件上传工具,它利用Adobe Flash技术实现,为用户提供了一种直观、用户友好的界面来选择和上传文件。这种组件通常被用在那些需要用户提交大量或者大文件大小的...

    FLASH大文件上传组件

    **FLASH大文件上传组件** 在Web开发中,文件上传功能是一项常见的需求,尤其在处理大文件时,传统的HTML表单提交方式往往存在诸多限制。此时,像“FLASH大文件上传组件”这样的工具就显得尤为重要。Flash技术曾经是...

    一个Flash多文件上传组件

    "一个Flash多文件上传组件"是专为此需求设计的工具,它允许用户一次性上传多个文件,大大提高了上传效率。这个组件是基于Adobe Flash技术实现的,尽管现在Flash已经逐渐被淘汰,但在其鼎盛时期,它提供了丰富的交互...

    多文件上传组件_Flash+ASP实现多文件上传功能

    总的来说,Flash+ASP的多文件上传组件提供了一种在早期Web应用程序中实现批量文件上传的有效解决方案。尽管现代Web技术如HTML5已经提供了更原生的文件上传支持,但这个组合对于那些仍依赖Flash的旧系统来说仍然具有...

    FLASH多文件上传组件,带进度条

    本文将深入探讨基于FLASH技术实现的多文件上传组件,以及它如何集成进度条功能,以提供更好的用户体验。 标题“FLASH多文件上传组件,带进度条”所指的是一种使用Adobe Flash技术开发的组件,它允许用户一次性选择...

    Flash多文件上传组件(Flex版)

    Flash多文件上传组件是Web开发中的一个重要工具,尤其在Flex技术框架下,它提供了一种高效、用户友好的方式来处理多个文件同时上传的需求。在Web应用中,传统的HTML表单仅支持单个文件的上传,这在处理大量或者批量...

    功能强大的文件上传组件

    【标题】"功能强大的文件上传组件"涉及到的核心技术是HTML5中的文件上传API,这是一个现代Web应用中不可或缺的功能,尤其在交互丰富的网站和应用程序中。HTML5的File API提供了更灵活、更强大的文件处理能力,使得...

    大文件上传组件

    在IT行业中,大文件上传组件是一个非常重要的工具,特别是在web应用程序和云计算环境中。它解决了由于文件大小限制导致的传统上传方式的不便,使用户能够方便地上传GB级别的大型文件。本篇将围绕大文件上传组件这一...

    flash上传文件,php

    首先,SWFUpload是一个开源的Flash文件上传组件,它提供了一种富用户体验,支持多文件选择、进度条显示以及预览功能。使用SWFUpload,可以在不刷新整个页面的情况下完成文件上传,这极大地提升了用户的交互体验。 ...

    网上下载的ASP文件上传组件

    ASP文件上传组件是一种在Web应用中用于用户向服务器上传文件的技术解决方案。该组件基于经典的ASP(Active Server Pages)脚本语言,并结合了Flash技术,以实现文件上传功能。ASP是微软开发的一种服务器端脚本环境,...

    asp.net 多文件上传组件

    "asp.net 多文件上传组件"是为了解决这个问题而设计的一种解决方案。这类组件通常提供了一种方便、高效且用户友好的方式来批量处理文件上传。 首先,我们要理解ASP.NET中的文件上传机制。在ASP.NET中,文件上传是...

    Flash头像上传组件

    "Flash头像上传组件"是这类功能的一种实现方式,尤其在早期网络应用中非常流行。Flash作为一种曾经广泛使用的交互式内容开发技术,提供了丰富的图形和多媒体处理能力,使得头像上传变得直观且用户体验良好。 首先,...

    php+flash头像上传组件

    本文将详细讨论“php+flash头像上传组件”的相关知识点,包括PHP处理图像上传、Flash与服务器通信以及如何实现头像大小调整。 首先,PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发,能够生成动态网页...

    Ajax+Flash多文件上传

    在这个方案中,`Swiff.Uploader` 是一个关键组件,它是一个开源的Flash文件上传组件。`Swiff.Uploader.fla` 和 `Swiff.Uploader.js` 是该组件的核心部分,其中 `.fla` 文件是Flash的源文件,用于编辑和编译Flash代码...

    JSP基于mootools的flash多文件上传组件

    **JSP基于MooTools的Flash多文件上传组件详解** 在Web开发中,用户界面的交互性和用户体验至关重要,其中文件上传功能是常见的需求之一。传统的文件上传方式往往需要页面刷新,影响了用户的操作流畅性。为了解决这...

    asp.net上传大文件组件基于flash

    在实际应用中,有多种现成的基于Flash的大文件上传组件可供选择,例如Uploadify、SWFUpload等,它们提供了丰富的API和自定义选项,可以帮助开发者快速集成大文件上传功能。 总之,ASP.NET上传大文件组件基于Flash的...

Global site tag (gtag.js) - Google Analytics