通过Flash实现ASP.NET多文件上传
?http://www.cnblogs.com/beniao/archive/2009/05/15/1457679.html 关于多文件上传,以前我一直使用JQuery去动态创建文件选择组件,然后POST到服务器去。最近一段时间一直在Flash身边打滚,Flash对于多文件上传有很好的支持,在CodePrject上有一个Flash的多文件上传组件的开源项目,将其封装为ASP.NET控件,当我们在开发ASP.NET程序的时候可以像使用普通控件一样,从工具箱里拉到界面上就可以使用。 ??????Flash采用Flex开发的,实现了选择文件和统计文件大小的功能,选择了多个文件时会动态的创建Flex组件显示到界面上,并且可以移除所选择的文件。以下是Flex项目结构图:???????????????????????? ?????????????????????????????? ??????Flex是完全基于事件驱动的开发模型,通过自定义一个Flex的Application来实现文件的多选和文件数量以及上传文件大小的统计等功能。如上图的FileUpload就是自定义的一个组件,扩展自VBox实现了动态创建组件和处理事件。详细参考下面代码: ?
? ??????在Flex的App程序里就使用上面自定义的Application组件来进行设计,详细如下代码块:
<?
xml?version="1.0"?encoding="utf-8"
?>
< custom:CustomApplication? xmlns:mx ="http://www.adobe.com/2006/mxml" ?xmlns:local ="*" ? ????xmlns:custom ="components.*" ?layout ="horizontal" ?????????backgroundAlpha ="0" ??fontSize ="12" > ???? mx:Style > ????????.button?{fontWeight:normal;} ???? </ mx:HBox > ???????? mx:VBox? width ="400" ?id ="fileContainer" > ???????????? id ="fileUploadBox" ?maxHeight ="250" ?width ="100%" ?label ="Files?to?Upload" ? mx:VBox mx:HBox? ="uploadStats" ?visible ="false" > ???????????????? mx:Text? text ="文件总数:" />< ="totalFiles" /> ???????????????? ="文件总大小:" ="totalSize" /> ???????????? mx:ProgressBar? ="totalProgressBar" ="275" ?mode ="manual" ="false" /> ???????? > ???????? ???????? mx:Button? ="browseButton" ="添加文件" ="100" ?styleName ="button" ="clearButton" ="移除文件" ="uploadButton" ="上传文件" ="cancelButton" ="取消上传" ="mytext" > custom:CustomApplication > ?????????????????????????????????????????? ?????控件中定义了多个属性,方便可视化设置控件的属性值,其中最为主要的属性为:UploadPage,该属性的作用就是指定通过那一个处理程序来处理上传文件的请求,实现请求中上传文件的保存功能。在示例程序里,我自定义了一个HttpHandler来处理上传文件的请求,实现IHttpHandler接口。程序代码如下: namespace
?FlashUpLoadWeb { ???? /// ? <summary> ???? ?上传文件处理程序 ???? </summary> ???? public ? class ?UploadHandler?:?IHttpHandler,?IRequiresSessionState ????{ ???????? #region ?IHttpHandler?成员 ???????? bool ?IsReusable ????????{ ???????????? get ?{? return ? true ;?} ????????} ???????? void ?ProcessRequest(HttpContext?context) ????????{ ???????????? // 文件上传存储路径 ???????????? string ?uploadPath? = ?context.Server.MapPath(context.Request.ApplicationPath? + ? " /Upload " ); ???????????? for ?( int ?i? = ? 0 ;?i? < ?context.Request.Files.Count;?i ++ ) ????????????{ ????????????????HttpPostedFile?uploadFile? = ?context.Request.Files[i]; ???????????????? if ?(uploadFile.ContentLength? > ? 0 ) ????????????????{ ????????????????????uploadFile.SaveAs(Path.Combine(uploadPath,?uploadFile.FileName)); ????????????????} ????????????} ????????????HttpContext.Current.Response.Write( " ); ????????} ???????? #endregion ????} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |