多选文件上传已经非常多了,而且选择性更强。有时候比较下一个更合适,最重要的是结合项目使用起来更方便。很多多选上传基本上都叫swf文件。用flash或者flex开发多选上传功能真的很方便。例如,flex本身内置的FileReferenceList对象支持文件的多选,这就方便多了。以下主要是基于flex的多选上传功能。主要功能如下:1 .选择多个文件进行上传,并显示单个文件的上传进度;2.显示所有文件的总上传进度;3.显示所有上传文件的总大小;4.上传前删除任何选定的一个或多个文件(按Ctrl或Shift键);5.将ASP.NET页面调用生成的swf文件异步上传到服务器
先看演示的截图,如下:
一般功能同上截图。下面主要讲讲在ASP.NET怎么打电话。我不会在这里详细解释FLEX内部的代码。FLEX里面的代码不多,可以在文章后面下载,可以用flex3.0或者4.0打开运行。有一个地方需要说明,就是在删除多选的地方,为了保证随机多选的正确性,需要对选中的索引项进行降序排序,每次从数组的最大值开始删除,避免循环删除时索引出界。
函数delete item(): void { var selectitems 3360 array=process _ list . selecteditems;var selectindex : array=process _ list . selectedindexes;selectIndex=selectIndex . sort(2);//索引按降序排序。var I count : int=selectitems . length;var sizemum : number=0;for(var I : int=0;iiCounti ){ info.splice(selectIndex[i],1);fileref . filelist . splice(selectIndex[I],1);//移除的选择项根据索引从大到小移除,这样在移除过程中索引不会超过界限} for(var j : number=0;jfileref . filelist . length;j ){ sizeMum=fileRef.fileList[j]。大小;} process _ list . data provider=info;tip _ txt . text=' total ' fileref . filelist . length ' files '(sizemum/(1024 * 1024))。tofixed (4)。tostring()“MB”;if(info . length=0){ delete _ BTN . enabled=false;}} Call其实比较简单。创建一个新的asp教程X页面来加载生成的swf文件。这里生成的文件名是upload.swf,它是使用flex内置的swfobject.js中的方法加载的,如下所示:
html xmlns=' http://www。w3。org/1999/XHTML '标题无标题页/title style type='text/css教程media='screen' html,body { height :100%;}车身{ margin:0划水:0;飞越:汽车;文本对齐:居中;背景-color : # ffffff;} # FlashContent { display : none;}/样式脚本类型='text/网页特效src=' http : wfobject。js '/script脚本类型=' text/JavaScript ' var swf version str=' 10。0 .0 ';var xiSwfUrlStr=' player产品安装。' swf ';var flashvars={ };flashvars.url='SaveFile.aspx?参数=标识|100,名称|测试用户;var params={ };params . quality=' high params . bgcolor=' # ffffffparams。allowscriptaccess=' Samedomain ';参数。允许全屏=' true定义变量属性={ };attributes . id=' uploadattributes . name=' uploadattributes . align=' middleswf '对象。embeddswf('上传。swf ',' flashContent ',' 587 ',' 370 ',swfVersionStr,xiSwfUrlStr,flashvars,params,attributes);函数uploadcomplete(){//完成后的操作,如页面跳转或关闭当前页文件。getelementbyid(' btnUpload ').disabled=false}函数提交表单(){此电影('上传')。uploadfile();}函数这部电影(电影名称){ if(导航器。appname。的索引('微软')!=-1) {返回窗口[电影名称];} else {返回文档[电影名称];} }函数禁用按钮(){ document。getelementbyid(' btnUpload ').disabled=true }/script/head body div id=' FlashContent ' style=' width :587 px;高度:380 px '/div br/输入id=' btnUpload ' style='宽度: 71px ' type=' button ' value='上传onclick=' Submit FORm()'//body/html如上,页面放置一个按钮,执行上传。冲击波flash里面的上传文件方法,在弯曲里面其实是回调了上传处理程序方法://===================//点击上传按钮//=====================内部函数uploadHandler(): void { if(uploadFile _ num!=0)返回;if(process _ list。数据提供程序==null | | info。长度=0){ alert。显示('您还未选择文件!','提示信息');返回;} else { externalinterface。呼叫('禁用按钮');//点上传后禁用按钮}为(var I :数=0;ifileref。文件列表。长度;I){ upload _ size _ total=FileReF。文件列表.大小;}上传文件(upload file _ num);add _ btn.enabled=false//点上传后禁用浏览按钮delete _ btn.enabled=false//点上传后禁用删除按钮} SaveFile.aspx页面主要是接收并存储文件,如下:受保护的无效页面_加载(对象发送方,事件参数e){//字符串Param=Request[' Param '];字符串路径=服务器. MapPath(' files/');if(!目录。存在(路径)){目录创建目录(路径);} //HttpFileCollection文件=请求。文件;//字符串文件名=字符串。空的;//for(int I=0;我归档了。计数;i ) //{ //fileName=路径。获取文件名(文件[i].文件名).toLower();//文件[i].另存为(路径文件名);//} https tedfile文件=Request .文件['文件数据'];//文件是一个一个异步提交过来,所以不需要循环文件集合如果(文件!=空文件content length 0){ 0文件。另存为(路径请求。表单[' filename ']);}}毕竟不是以文件流的形式接收和存储,所以如果是上传大文件的话,可以看到显示页面已经上传完成100%,但是到这个处理存储页面会停顿一会,接收并存储完成后前台页面才会反应过来。还有一点要提一下,就是如果传递的参数包含中文的话,需要配置编码格式为utf-8格式,但有原先的系统可能是gb2312格式的,改成utf-8可能对系统有影响,可以单独建一个webconfig,上传的时候就读单独的配置。
以上就是ASP。网批量多选文件上传代码,希望可以解决大家进行ASP .网上传多文件时遇到的问题。