朋友有个要求是要在页面上上传文件的时候只能选择指定类型(后缀名)的文件,显然<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>
分享到:
相关推荐
【标题】:“Flash文件上传组件”是一种用于网页中的文件上传工具,它利用Adobe Flash技术实现,为用户提供了一种直观、用户友好的界面来选择和上传文件。这种组件通常被用在那些需要用户提交大量或者大文件大小的...
**FLASH大文件上传组件** 在Web开发中,文件上传功能是一项常见的需求,尤其在处理大文件时,传统的HTML表单提交方式往往存在诸多限制。此时,像“FLASH大文件上传组件”这样的工具就显得尤为重要。Flash技术曾经是...
"一个Flash多文件上传组件"是专为此需求设计的工具,它允许用户一次性上传多个文件,大大提高了上传效率。这个组件是基于Adobe Flash技术实现的,尽管现在Flash已经逐渐被淘汰,但在其鼎盛时期,它提供了丰富的交互...
总的来说,Flash+ASP的多文件上传组件提供了一种在早期Web应用程序中实现批量文件上传的有效解决方案。尽管现代Web技术如HTML5已经提供了更原生的文件上传支持,但这个组合对于那些仍依赖Flash的旧系统来说仍然具有...
本文将深入探讨基于FLASH技术实现的多文件上传组件,以及它如何集成进度条功能,以提供更好的用户体验。 标题“FLASH多文件上传组件,带进度条”所指的是一种使用Adobe Flash技术开发的组件,它允许用户一次性选择...
Flash多文件上传组件是Web开发中的一个重要工具,尤其在Flex技术框架下,它提供了一种高效、用户友好的方式来处理多个文件同时上传的需求。在Web应用中,传统的HTML表单仅支持单个文件的上传,这在处理大量或者批量...
【标题】"功能强大的文件上传组件"涉及到的核心技术是HTML5中的文件上传API,这是一个现代Web应用中不可或缺的功能,尤其在交互丰富的网站和应用程序中。HTML5的File API提供了更灵活、更强大的文件处理能力,使得...
在IT行业中,大文件上传组件是一个非常重要的工具,特别是在web应用程序和云计算环境中。它解决了由于文件大小限制导致的传统上传方式的不便,使用户能够方便地上传GB级别的大型文件。本篇将围绕大文件上传组件这一...
首先,SWFUpload是一个开源的Flash文件上传组件,它提供了一种富用户体验,支持多文件选择、进度条显示以及预览功能。使用SWFUpload,可以在不刷新整个页面的情况下完成文件上传,这极大地提升了用户的交互体验。 ...
ASP文件上传组件是一种在Web应用中用于用户向服务器上传文件的技术解决方案。该组件基于经典的ASP(Active Server Pages)脚本语言,并结合了Flash技术,以实现文件上传功能。ASP是微软开发的一种服务器端脚本环境,...
"asp.net 多文件上传组件"是为了解决这个问题而设计的一种解决方案。这类组件通常提供了一种方便、高效且用户友好的方式来批量处理文件上传。 首先,我们要理解ASP.NET中的文件上传机制。在ASP.NET中,文件上传是...
"Flash头像上传组件"是这类功能的一种实现方式,尤其在早期网络应用中非常流行。Flash作为一种曾经广泛使用的交互式内容开发技术,提供了丰富的图形和多媒体处理能力,使得头像上传变得直观且用户体验良好。 首先,...
本文将详细讨论“php+flash头像上传组件”的相关知识点,包括PHP处理图像上传、Flash与服务器通信以及如何实现头像大小调整。 首先,PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发,能够生成动态网页...
在这个方案中,`Swiff.Uploader` 是一个关键组件,它是一个开源的Flash文件上传组件。`Swiff.Uploader.fla` 和 `Swiff.Uploader.js` 是该组件的核心部分,其中 `.fla` 文件是Flash的源文件,用于编辑和编译Flash代码...
**JSP基于MooTools的Flash多文件上传组件详解** 在Web开发中,用户界面的交互性和用户体验至关重要,其中文件上传功能是常见的需求之一。传统的文件上传方式往往需要页面刷新,影响了用户的操作流畅性。为了解决这...
在实际应用中,有多种现成的基于Flash的大文件上传组件可供选择,例如Uploadify、SWFUpload等,它们提供了丰富的API和自定义选项,可以帮助开发者快速集成大文件上传功能。 总之,ASP.NET上传大文件组件基于Flash的...