asp.net批量多选文件上传解决方案

 更新时间:2021年9月22日 10:10  点击:1292

多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的。很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能。
主要实现的功能如下:
  一、选择多个文件上传并显示单个文件的上传进度
  二、显示所有文件总的上传进度
  三、显示所有上传文件的总大小
  四、上传前可以删除任意选定一个或多个文件(按住Ctrl或Shift键)
  五、ASP.NET页面调用生成的swf文件异步上传到服务器

先看下演示的截图,如下:

   

大致功能和上面截图一样,下面主要说下ASP.NET里怎么调用,FLEX的里面代码我这里就不详细说明了,FLEX里面的代码不多,文章后面提供下载,用flex3.0或4.0可以打开运行。
  其中有一个地方说明一下,就是在多选删除的地方,为了保证随意多选删除的正确性,需要把选定的索引项降序排序,每次从数组最大处删除,避免循环删除时索引超界。

function deleteItem():void{
 var selectItems:Array = process_list.selectedItems;
 var selectIndex:Array = process_list.selectedIndices;
 selectIndex = selectIndex.sort(2);//索引按降序排序
 var iCount:int = selectItems.length;
 var sizeMum:Number = 0;
 for(var i:int=0;i<iCount;i++){
  info.splice(selectIndex[i],1);
  fileRef.fileList.splice(selectIndex[i],1);//移除的选择项按索引从大到小移除,以便移除过程中索引不超界
 }
 for(var j:Number=0;j<fileRef.fileList.length;j++){      
  sizeMum+=fileRef.fileList[j].size;     
 }   
 process_list.dataProvider = info;
 tip_txt.text="共"+fileRef.fileList.length+"个文件 "+(sizeMum/(1024*1024)).toFixed(4).toString()+"MB";
      
 if(info.length<=0){
  delete_btn.enabled = false;
 }     
}

  调用其实也比较简单,新建一个asp教程x页面加载生成的swf文件,这里生成的文件名是upload.swf,利用flex内置的swfobject.js里面的方法加载,如下:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
 <title>无标题页</title>  
   <style type="text/css教程" media="screen"> 
   html, body { height:100%; }
   body { margin:0; padding:0; overflow:auto; text-align:center; 
     background-color: #ffffff; } 
   #flashContent { display:none; }
  </style>
   
  <script type="text/网页特效" src="swfobject.js"></script> 
  <script type="text/javascript" >

   var swfVersionStr = "10.0.0";
   var xiSwfUrlStr = "playerProductInstall.swf";
   var flashvars = {};
   flashvars.url = "SaveFile.aspx?Param=ID|100,NAME|测试用户";
   var params = {};
   params.quality = "high";
   params.bgcolor = "#ffffff";
   params.allowscriptaccess = "sameDomain";
   params.allowfullscreen = "true";
   var attributes = {};
   attributes.id = "upload";
   attributes.name = "upload";
   attributes.align = "middle";
   swfobject.embedSWF(
    "upload.swf", "flashContent", 
    "587", "370", 
    swfVersionStr, xiSwfUrlStr, 
    flashvars, params, attributes);
 
   function uploadCompelete(){
    //完成后的操作,如页面跳转或关闭当前页
    document.getElementById('btnUpload').disabled = false;
   }
   function submitForm(){
    thisMovie("upload").uploadfile();
   }
   function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
     return window[movieName];
    } else {
     return document[movieName];
    }
   }
   function disabledButton()
    {
    document.getElementById('btnUpload').disabled = true;
    }
 
  </script>
</head>
<body>
 <div id="flashContent" style="width:587px; height:380px">
   </div>
  <br />
  <input id="btnUpload" style="width: 71px" type="button" value="上 传" onclick="submitForm()" />
</body>
</html>
  如上,页面放置一个按钮,执行upload.swf里面的uploadfile方法,在flex里面其实是回调了uploadHandler方法:
//===================
// 点击上传按钮
//===================
internal function uploadHandler():void{
 if(uploadFile_num!=0) return;
 if(process_list.dataProvider==null || info.length<=0){
  Alert.show("您还未选择文件!","提示信息");
  return;
 }
 else
 {
  ExternalInterface.call("disabledButton"); //点上传后禁用按钮 
 }
 for(var i:Number=0;i<fileRef.fileList.length;i++){    
  upload_size_total+=fileRef.fileList[i].size;          
 }         
 uploadfile(uploadFile_num); 
 add_btn.enabled = false; //点上传后禁用浏览按钮 
 delete_btn.enabled = false;//点上传后禁用删除按钮 
}
 
  SaveFile.aspx页面主要是接收并存储文件,如下:
protected void Page_Load(object sender, EventArgs e)
{
 //string param = Request["Param"];
 string path = Server.MapPath("files/");
 if (!Directory.Exists(path))
 {
  Directory.CreateDirectory(path);
 }
 //HttpFileCollection files = Request.Files;
 //string fileName = string.Empty;
 //for (int i = 0; i < files.Count; i++)
 //{
 // fileName = Path.GetFileName(files[i].FileName).ToLower();
 // files[i].SaveAs(path + fileName);
 //}
 HttpPostedFile file = Request.Files["Filedata"]; //文件是一个一个异步提交过来,所以不需要循环文件集合
 if (file != null && file.ContentLength > 0)
 {
  file.SaveAs(path+Request.Form["filename"]);
 }
}

  毕竟不是以文件流的形式接收和存储,所以如果是上传大文件的话,可以看到显示页面已经上传完成100%,但是到这个处理存储页面会停顿一会,接收并存储完成后前台页面才会反应过来。
  还有一点要提一下,就是如果传递的参数包含中文的话,需要config编码格式为utf-8格式,但有原先的系统可能是gb2312格式的,改成utf-8可能对系统有影响,可以单独建一个webconfig,上传的时候就读单独的config。

以上就是asp.net批量多选文件上传代码,希望可以解决大家进行ASP.NET上传多文件时遇到的问题。

[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传

    这篇文章主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下...2015-12-25
  • js实现上传文件添加和删除文件选择框

    这篇文章主要为大家详细介绍了js实现上传文件添加和删除文件选择框 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-25
  • jQuery+ajax简单实现文件上传的方法

    这篇文章主要介绍了jQuery+ajax简单实现文件上传的方法,结合实例形式简单分析了jQuery基于ajax的post方法进行文件传输及asp.net后台处理技巧,需要的朋友可以参考下...2016-06-12
  • 适用于初学者的简易PHP文件上传类

    本文实例讲述了PHP多文件上传类,分享给大家供大家参考。具体如下:<&#63;phpclass Test_Upload{ protected $_uploaded = array(); protected $_destination; protected $_max = 1024000; protected $_messages =...2015-10-30
  • 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

    这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • js 实现文件上传样式详情

    这篇文章主要介绍了js 实现文件上传样式,下面文章举例说明js 是如何实现文件上传样式的,附有代码详细解说,需要的朋友可以参考一下,希望对你有所帮助...2021-10-21
  • asp.net通过消息队列处理高并发请求(以抢小米手机为例)

    这篇文章主要介绍了asp.net通过消息队列处理高并发请求(以抢小米手机为例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • PHP利用APC模块实现大文件上传进度条的方法

    php 大文件带进度的上传,一直是一个令php程序员很苦恼的问题。查询baidu 、Google ,大体做带进度的上传方式为:flash+php,socket,apc+php等,下面我介绍了apc +php+ajax制作的带进度的上传,并贴出源码,希望对大家有用。 Altern...2015-10-30
  • ASP.NET单选按钮控件RadioButton常用属性和方法介绍

    RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个...2021-09-22
  • C#文件上传的简单实现

    这篇文章主要为大家详细介绍了C#文件上传的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • ASP.NET 2.0中的数据操作:使用两个DropDownList过滤的主/从报表

    在前面的指南中我们研究了如何显示一个简单的主/从报表, 该报表使用DropDownList和GridView控件, DropDownList填充类别,GridView显示选定类别的产品. 这类报表用于显示具有...2016-05-19
  • ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容

    这篇文章主要介绍了ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容的实现代码,感兴趣的小伙伴们可以参考一下...2021-09-22