c# .net 上传多个文件 By shawl.qiu

shawl.qiu c# .net upload v1.0

说明:
最近刚开始学习 .net, 俺本来是打算先从 JScript.net 下手...
不过在CSDN论坛发个帖子征求意见后...还是决定从.NET的主流语言 C#入手...
毕竟整个.NET Framework都是C#写的...
然后, 我发现 .NET最 重要的是它的 .NET Framework, 至于用什么语言应该差不多.
唉, 不说了, 目前这种一知半解的水平说多了会挨砖头...

目录:
1. upload.cs
2. x.aspx 调用演示

shawl.qiu
2007-01-30
http://blog.csdn.net/btbtd

内容:
1. upload.cs
  1. using System;
  2. using System.Collections;
  3. using System.Data;
  4. using System.IO;
  5. using System.Text.RegularExpressions;
  6. using System.Web;

  7. /*-----------------------------------------------------------------------------------*/
  8.  * shawl.qiu c# .net upload v1.0
  9. /*-----------------------------------------------------------------------------------*/
  10. //---------------------------------------------------------------------begin class upload
  11. public class upload
  12. {
  13.  //-----------------------------------begin event
  14.  public upload()
  15.  {
  16.  }
  17.  
  18.  ~upload()
  19.  {
  20.  }
  21.  //-----------------------------------end event
  22.  
  23.  //-----------------------------------begin public constant
  24.  //-----------------------begin about
  25.  public const string auSubject="shawl.qiu c# .net upload";
  26.  public const string auVersion="v1.0";
  27.  public const string au="shawl.qiu";
  28.  public const string auEmail="shawl.qiu@gmail.com";
  29.  public const string auBlog="http://blog.csdn.net/btbtd";
  30.  public const string auCreateDate="2007-1-30";
  31.  //-----------------------end about
  32.  //-----------------------------------end public constant
  33.  
  34.  //-----------------------------------begin private constant
  35.  //-----------------------------------end private constant
  36.  
  37.  //-----------------------------------begin public static method
  38.  //-----------------------------------end public static method
  39.  
  40.  //-----------------------------------begin private static method
  41.  //-----------------------------------end private static method
  42.  
  43.  //-----------------------------------begin public variable
  44.  public Boolean debug=false;
  45.  public Boolean autorename=false;
  46.  
  47.  public String path="/uploads/";
  48.  public String ext="7z,rar,zip,mp3,bmp,gif,jpg,jpeg,png,txt,swf";
  49.  public String goback_url="?";
  50.  public String allFilePath="";
  51.  
  52.  public Int32 interval=10;
  53.  public Int32 goback_second=10;
  54.  public Int32 item=5;
  55.  public Int32 totalsize=1024*5;
  56.  public Int32 singlesize=1024;
  57.  //-----------------------------------end public variable
  58.  
  59.  //-----------------------------------begin public method
  60.  public void info(System.Web.UI.HtmlControls.HtmlContainerControl oSpan)
  61.  {
  62.   oSpan.InnerHtml="<ol>"+
  63.    "<li>允许上传的文件类型<b>: "+this.ext+"</b></li>"+
  64.    "<li>每次总上传大小最大为 <b>: "+this.totalsize+"kb</b>, 每文件最大为 <b>"+
  65.    this.singlesize+"kb</b>.</li>"+
  66.    "<li>每次上传时间间隔为<b>: "+this.interval+"</b>秒.</li>"+
  67.    "</ol>";
  68.  }
  69.  
  70.  public void getItem(System.Web.UI.WebControls.Repeater rpt)
  71.  {
  72.   DataTable dt = new DataTable();
  73.   DataRow dr;
  74.   dt.Columns.Add(new DataColumn("id", typeof(Int32)));
  75.   
  76.   for (int i = 0; i < this.item; i++) 
  77.   {
  78.    dr = dt.NewRow();
  79.    dr[0] = i;
  80.    dt.Rows.Add(dr);
  81.   } // end for
  82.   
  83.    rpt.DataSource=new DataView(dt);
  84.    rpt.DataBind();
  85.  } // end public void getItem
  86.  
  87.  public void go()
  88.  {
  89.   if(HttpContext.Current.Session["sqUpFl"]==null)
  90.   {
  91.    HttpContext.Current.Session["sqUpFl"]=DateTime.Now;
  92.   }
  93.   
  94.   DateTime dtSession=DateTime.Parse(HttpContext.Current.Session["sqUpFl"]+"");

  95.   if(dtSession>DateTime.Now)
  96.   {
  97.    TimeSpan hasInterval=dtSession-DateTime.Now;
  98.    
  99.    finished("每次上传时间间隔为 "+this.interval+" 秒, 请稍候...",
  100.     hasInterval.Seconds, this.goback_url);
  101.    goto End;
  102.   }
  103.   
  104.   //---------------------检测上传目录是否存在
  105.   String path_phs=HttpContext.Current.Server.MapPath(path);
  106.   if(!Directory.Exists(path_phs))
  107.   {
  108.    HttpContext.Current.
  109.     Response.Write("<h2>指定的上传目录不存在, 操作被取消.</h2>");
  110.    goto End;
  111.   }
  112.   
  113.   Int32 upTotal=HttpContext.Current.Request.ContentLength/1024;
  114.   Int32 total=HttpContext.Current.Request.Files.AllKeys.Length;
  115.   
  116.   ArrayList aUpsize=new ArrayList();
  117.   ArrayList aNoExt=new ArrayList();
  118.   ArrayList aNotAllowExt=new ArrayList();
  119.   ArrayList aFinished=new ArrayList();
  120.   
  121.   if(upTotal>this.totalsize) goto Upsize;
  122.    
  123.   for(Int32 i=0; i<total; i++)
  124.   {
  125.    System.Web.HttpPostedFile files=HttpContext.Current.Request.Files[i];
  126.    if(files.ContentLength>0)
  127.    { 
  128.     String flnm=Path.GetFileName(files.FileName);
  129.     String justnm=Path.GetFileNameWithoutExtension(files.FileName);
  130.     String justext=Path.GetExtension(files.FileName);
  131.     
  132.     String flph=this.path+justnm+justext;
  133.     String flph_phs=HttpContext.Current.Server.MapPath(flph);
  134.     
  135.     //-----------------------------------单文件超出限制大小
  136.     Int32 flSize=files.ContentLength/1024;
  137.     if(flSize>this.singlesize)
  138.     {
  139.      aUpsize.Add("文件: "+flnm+", 大小为: "+flSize+" kb.");
  140.      continue;
  141.     }    
  142.     
  143.     if(!Path.HasExtension(flnm))
  144.     {
  145.      aNoExt.Add("文件: "+flnm+", 没有扩展名.");
  146.      continue;
  147.     }
  148.     
  149.     String extTemp=Regex.Replace(justext,"^.","");
  150.     if(!Regex.IsMatch(this.ext, "//b"+extTemp+"//b", RegexOptions.IgnoreCase))
  151.     {
  152.      aNotAllowExt.Add("不允许上传的文件扩展: "+flnm);
  153.      continue;
  154.     }
  155.     
  156.     if(File.Exists(flph_phs)) //------------------已存在相同同名文件
  157.     {
  158.      if(autorename)
  159.      { 
  160.       Int32 iRename=1;
  161.       while(true)
  162.       {
  163.        String sNameTemp=HttpContext.Current.
  164.         Server.MapPath(this.path+justnm+"_"+(iRename++)+justext);
  165.        if(!File.Exists(sNameTemp))
  166.        {
  167.         flph_phs=sNameTemp;
  168.         goto SaveFile;
  169.        } // end if 3
  170.       } // end while
  171.      } // end if 2
  172.     } // end if 1
  173.     SaveFile:;
  174.      files.SaveAs(flph_phs);
  175.   
  176.      String flnmTemp=Path.GetFileName(flph_phs);
  177.      aFinished.Add("文件: "+flnmTemp+" 已上传.");
  178.      
  179.      this.allFilePath+=this.path+flnmTemp+",";
  180.      
  181.      HttpContext.Current.Session["sqUpFl"]=
  182.       DateTime.Now.AddSeconds(this.interval);
  183.    } // end if
  184.   } // end for
  185.   goto Report;
  186.   
  187.   Upsize:
  188.    HttpContext.Current.Response.Write("<h2>上传大小超出限制, 已被终止.</h2>");
  189.   goto End;
  190.    
  191.   Report:
  192.    listAl("已上传文件 ", aFinished);
  193.    listAl("单文件超出限制大小的有 ", aUpsize);
  194.    listAl("没有文件扩展名的有 ", aNoExt);
  195.    listAl("不允许上传的文件扩展有 ", aNotAllowExt);
  196.   goto Finished;
  197.   
  198.   Finished:
  199.    finished("操作已完毕", this.goback_second, this.goback_url);
  200.   End: 
  201.    this.allFilePath=Regex.Replace(this.allFilePath,",$","");
  202.  } // end go
  203.  //-----------------------------------end public method
  204.  
  205.  //-----------------------------------begin private variable
  206.  //-----------------------------------end private variable
  207.  
  208.  //-----------------------------------begin private method
  209.  private void listAl(String sDetail, ArrayList oAl)
  210.  {
  211.   if(oAl.Count>0)
  212.   {
  213.    HttpContext.Current.Response.Write("<ol><label>"+sDetail+"<b>"+
  214.     oAl.Count+"个</b>.</label>");
  215.    foreach(Object item in oAl)
  216.    {
  217.     HttpContext.Current.Response.Write("<li>"+item+"</li>");
  218.    }
  219.    HttpContext.Current.Response.Write("</ol><hr/>");
  220.   }
  221.  }
  222.  
  223.  private void finished(String sPrompt, Int32 iSecond, String sUrl)
  224.  {
  225.   HttpContext.Current.Response.Write("<script type=/"text/javascript/">/n");
  226.   HttpContext.Current.Response.Write("//<![CDATA[/n");
  227.   HttpContext.Current.Response.Write(" var temp=onload;/n");
  228.   HttpContext.Current.Response.Write(" onload=function(){/n");
  229.   HttpContext.Current.Response.Write("  try{temp()}catch(e){}/n");
  230.   HttpContext.Current.Response.Write("  fTimer("+iSecond+",'timer', 10);/n");
  231.   HttpContext.Current.Response.Write(}/n");
  232.   HttpContext.Current.Response.Write("  function fTimer(iTimestamp, sId, iMs){/n");
  233.   HttpContext.Current.Response.Write("  if(!(iTimestamp.constructor==Date)){/n");
  234.   HttpContext.Current.Response.Write("   var sqTimeStamp=new Date();/n");
  235.   HttpContext.Current.Response.Write("   sqTimeStamp.setSeconds(sqTimeStamp.getSeconds()+iTimestamp);/n");
  236.   HttpContext.Current.Response.Write("   iTimestamp=sqTimeStamp;/n");
  237.   HttpContext.Current.Response.Write("  }/n");
  238.   HttpContext.Current.Response.Write("    var tl=arguments.callee;/n");
  239.   HttpContext.Current.Response.Write("    if(typeof sId=='string'){/n");
  240.   HttpContext.Current.Response.Write("   var oEle=document.getElementById(sId);/n");
  241.   HttpContext.Current.Response.Write("  else {/n");
  242.   HttpContext.Current.Response.Write("   var oEle=sId;/n");
  243.   HttpContext.Current.Response.Write("  }/n");
  244.   HttpContext.Current.Response.Write("  var dt=new Date();/n");
  245.   HttpContext.Current.Response.Write("  var iCk=((iTimestamp.getTime()-dt.getTime())/1000).toFixed(3);/n");
  246.   HttpContext.Current.Response.Write("  if(iCk<=0){/n");
  247.   HttpContext.Current.Response.Write("   oEle.innerHTML='00.000';/n");
  248.   HttpContext.Current.Response.Write("   return false;/n");
  249.   HttpContext.Current.Response.Write("  else {/n");
  250.   HttpContext.Current.Response.Write("   oEle.innerHTML=iCk;/n");
  251.   HttpContext.Current.Response.Write("   var iTimer=setTimeout(function(){tl(iTimestamp, oEle, iMs)},iMs); /n");
  252.   HttpContext.Current.Response.Write("  }/n");
  253.   HttpContext.Current.Response.Write(} // end function fTimer // shawl.qiu script/n");
  254.   HttpContext.Current.Response.Write("//]]>/n");
  255.   HttpContext.Current.Response.Write("</script>/n");

  256.   HttpContext.Current.
  257.    Response.Write("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=utf-8/" />");
  258.    HttpContext.Current.
  259.     Response.Write("<meta http-equiv=/"refresh/" content=/""+iSecond+";URL="+sUrl+"/">");
  260.   HttpContext.Current.
  261.    Response.Write("<div style=/"display:table;width:100%;background-color:yellow!important;"+
  262.     "color:black!important;text-align:center!important;/">"+
  263.     sPrompt+", <span id='timer'>"+iSecond+"</span>秒 后返回.</div>");
  264.  }
  265.  //-----------------------------------end private method
  266.  
  267.  //-----------------------------------begin public property
  268.  //-----------------------------------end public property
  269.   
  270.  //-----------------------------------begin private property
  271.  //-----------------------------------end private property
  272. }
  273. //---------------------------------------------------------------------end class upload


2. x.aspx 调用演示
  1. <%@ Page Language="C#" src="cs/upload.cs" AutoEventWireup="True" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>shawl.qiu template</title>
  7. </head>
  8. <body>
  9. <script runat="server">
  10.  void Page_Load(Object s, EventArgs e)
  11.  {
  12.   upload up=new upload();
  13.   up.item=5;
  14.   up.info(spnInfo);
  15.   up.getItem(aspRpt);
  16.   up=null;
  17.  }
  18.  
  19.  void btn_up(Object s, EventArgs e)
  20.  {
  21.   upload up=new upload();
  22.   
  23.   up.debug=true;
  24.   up.path="/uploads/";           // 上传目录;
  25.   up.goback_url=Request.Url+"";  // 上传完毕后返回的 URL
  26.   up.goback_second=20;           // 上传后返回间隔
  27.   up.interval=20;                // 每次上传间隔, 单位秒
  28.   up.autorename=true;            // 自动重命名;
  29.   up.go();                       // 执行上传操作; 
  30.   //Response.Write(up.allFilePath);// 返回已上传的所有文件路径, 以逗号(,)分隔.
  31.   
  32.   up=null;
  33.  }

  34. </script>
  35.  <form runat="server">
  36.   <span id='spnReport' runat='server'></span>
  37.   <span id='spnInfo' runat='server'></span>
  38.   <ol>
  39.    <asp:Repeater id="aspRpt" runat="server">
  40.     <ItemTemplate>
  41.      <li><input type='file' runat='server' /></li>
  42.     </ItemTemplate>
  43.    </asp:Repeater>
  44.   </ol>  
  45.   <li/><input type='submit' OnServerClick="btn_up" runat='server' />
  46.  </form>
  47. </body>
  48. </html>
  49.  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值