shawl.qiu c# .net upload class v1.2

类别: CSharp.Net, 类库
标签: upload, .net, uploader, c#
摘要: 上传文件
正文:
1. x.aspx
2. Upload.cs

1. x.aspx
  1. <%@ Page Language="C#AutoEventWireup="True" %>
  2. <%@ Assembly src="ax12.cs" %>
  3. <script runat="server">
  4.  void Page_Load(Object s, EventArgs e)
  5.  {
  6.   Upload up = new Upload();
  7.    
  8.    up.Debug = false;
  9.    up.AutoRename = true;
  10.    
  11.    up.UploadPath = "/uploads/";
  12.    up.Extension = ".7z|.rar|.zip|.mp3|.bmp|.gif|.jpg|.jpeg|.png|.txt|.swf";
  13.    
  14.    up.GoBackUrl = "?";
  15.    
  16.    up.UploadSessionName = "sqUploadCheckInterver";
  17.    
  18.    up.Interval = 10;
  19.    up.GoBackSecond = 10;
  20.    
  21.    up.TotalItem = 5;
  22.    
  23.    up.TotalKb = 1024*5;
  24.    up.SingleKb = 1024;
  25.    
  26.    up.UploadPlaceHolder = ph;
  27.    up.Go();
  28.    
  29.    up = null;
  30.  } // end Page_Load

  31. </script>
  32. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  33. <html xmlns="http://www.w3.org/1999/xhtml">
  34. <head>
  35. <meta http-equiv="Content-Typecontent="text/html; charset=utf-8" />
  36. <title>shawl.qiu template</title>
  37. </head>
  38. <body>
  39.  <form runat="server">
  40.   <asp:PlaceHolder id=ph runat=server 
  41.    />
  42.  </form>
  43. </body>
  44. </html>
  45.  
2. Upload.cs
  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Text.RegularExpressions;
  5. using System.Web;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.HtmlControls;

  9. public delegate void OneArgStringDelegate(String Str);

  10. /*-----------------------------------------------------------------------------------*\
  11.  * shawl.qiu c# .net Upload class v1.2
  12. \*-----------------------------------------------------------------------------------*/
  13. //---------------------------------------------------------------------begin class upload
  14. public class Upload
  15. {
  16.  //-----------------------------------begin event
  17.  public Upload()
  18.  {
  19.  }
  20.  
  21.  ~Upload()
  22.  {
  23.  }
  24.  //-----------------------------------end event
  25.  
  26.  //-----------------------------------begin public constant
  27.  //-----------------------begin about
  28.  public const string auSubject = "shawl.qiu c# .net Upload class";
  29.  public const string auVersion = "v1.2";
  30.  public const string au = "shawl.qiu";
  31.  public const string auEmail = "shawl.qiu@gmail.com";
  32.  public const string auBlog = "http://blog.csdn.net/btbtd";
  33.  public const string auCreateDate = "2007-1-30";
  34.  public const string auFirstUpdate = "2007-2-8 v1.1";
  35.  public const string auSecondUpdate = "2007-2-27 v1.2";
  36.  //-----------------------end about
  37.  //-----------------------------------end public constant
  38.  
  39.  //-----------------------------------begin public variable
  40.  public bool Debug = false;
  41.  public bool AutoRename=false;
  42.  
  43.  public string UploadPath = "/uploads/";
  44.  public string Extension = ".7z|.rar|.zip|.mp3|.bmp|.gif|.jpg|.jpeg|.png|.txt|.swf";
  45.  public string GoBackUrl = "?";
  46.  
  47.  public string UploadSessionName = "sqUploadCheckInterver";
  48.  
  49.  public int Interval = 10;
  50.  public int GoBackSecond = 10;
  51.  public int TotalItem = 5;
  52.  public int TotalKb = 1024*5;
  53.  public int SingleKb = 1024;
  54.  
  55.  public PlaceHolder UploadPlaceHolder;
  56.  
  57.  public OneArgStringDelegate ReturnFilePath;
  58.  
  59.  //-----------------------------------end public variable
  60.  
  61.  //-----------------------------------begin public method
  62.  public void Go()
  63.  {
  64.   if(UploadPlaceHolder!=null)
  65.   {
  66.    UploadPlaceHolder.Controls.Add(ErrorLabel);
  67.    UploadPlaceHolder.Controls.Add(GobackLabel);
  68.    UploadPlaceHolder.Controls.Add(UploadDetailsLabel);
  69.    
  70.    InfoLabel=new Label();
  71.    InfoLabel.Text="<ul>\n"+
  72.     "<li>当前上传路径: <b>"+UploadPath+"</b></li>\n"+
  73.     "<li>允许上传的文件类型<b>: "+Extension+"</b></li>\n"+
  74.     "<li>每次总上传大小最大为 <b>: "+TotalKb+"kb</b>, 每文件最大为 <b>"+
  75.     SingleKb+"kb</b>.</li>\n"+
  76.     "<li>每次上传时间间隔为<b>: "+Interval+"</b>秒.</li>\n"+
  77.     "</ul>";
  78.      
  79.    UploadPlaceHolder.Controls.Add(InfoLabel);
  80.     
  81.     LiteralBox=new Literal();
  82.     LiteralBox.Text="<ol>";
  83.     UploadPlaceHolder.Controls.Add(LiteralBox);
  84.    
  85.    for(int i=0; i<TotalItem; i++)
  86.    {
  87.     LiteralBox=new Literal();
  88.     LiteralBox.Text="<li>";
  89.     UploadPlaceHolder.Controls.Add(LiteralBox);
  90.     
  91.     UpInputItem = new HtmlInputFile(); 
  92.     UploadPlaceHolder.Controls.Add(UpInputItem);
  93.     
  94.     LiteralBox=new Literal();
  95.     LiteralBox.Text="</li>\n";
  96.     UploadPlaceHolder.Controls.Add(LiteralBox);
  97.    }     
  98.     
  99.    LiteralBox=new Literal();
  100.    LiteralBox.Text="</br/>\n";
  101.    UploadPlaceHolder.Controls.Add(LiteralBox);
  102.    
  103.    SubmitButton=new Button();
  104.    SubmitButton.Text="Upload now";
  105.    SubmitButton.Click+=new EventHandler(go);
  106.    SubmitButton.Attributes["onclick"]="javascript:return confirm('现在上传文件吗?')";
  107.    UploadPlaceHolder.Controls.Add(SubmitButton);
  108.     
  109.    LiteralBox=new Literal();
  110.    LiteralBox.Text=" <input type=\"reset\" value=\"reset\""+
  111.    " onclick=\"return confirm('现在重置吗');\" />";
  112.    UploadPlaceHolder.Controls.Add(LiteralBox);
  113.     
  114.    LiteralBox=new Literal();
  115.    LiteralBox.Text="</ol>\n";
  116.    UploadPlaceHolder.Controls.Add(LiteralBox);
  117.   }
  118.  } // end public void UploadBox
  119.  
  120.  public void go(Object s, EventArgs e)
  121.  {
  122.   
  123.   if(HttpContext.Current.Session[UploadSessionName]==null)
  124.   {
  125.    HttpContext.Current.Session[UploadSessionName]=DateTime.Now;
  126.   }
  127.   
  128.   DateTime dtSession=DateTime.Parse(HttpContext.Current.Session[UploadSessionName]+"");

  129.   if(dtSession>DateTime.Now)
  130.   {
  131.    TimeSpan hasInterval=dtSession-DateTime.Now;
  132.    
  133.    GoBack("每次上传时间间隔为 "+Interval+" 秒, 请稍候...",
  134.     hasInterval.Seconds, GoBackUrl, GobackLabel);
  135.    return;
  136.   }
  137.   
  138.   //---------------------检测上传目录是否存在
  139.   String path_phs=HttpContext.Current.Server.MapPath(UploadPath);
  140.   if(!Directory.Exists(path_phs))
  141.   {
  142.    if(InfoLabel!=null)
  143.    {
  144.     InfoLabel.Text+="<h2>指定的上传目录不存在, 操作被取消.</h2>";
  145.    }
  146.    return;
  147.   }
  148.   
  149.   int upTotal=HttpContext.Current.Request.ContentLength/1024;
  150.   int total=HttpContext.Current.Request.Files.AllKeys.Length;
  151.   
  152.   ArrayList aUpsize=new ArrayList();
  153.   ArrayList aNoExt=new ArrayList();
  154.   ArrayList aNotAllowExt=new ArrayList();
  155.   ArrayList aFinished=new ArrayList();
  156.   
  157.   if(upTotal>TotalKb) goto Upsize;
  158.    
  159.   for(int i=0; i<total; i++)
  160.   {
  161.    System.Web.HttpPostedFile files=HttpContext.Current.Request.Files[i];
  162.    if(files.ContentLength>0)
  163.    { 
  164.     String flnm=Path.GetFileName(files.FileName);
  165.     String justnm=Path.GetFileNameWithoutExtension(files.FileName);
  166.     String justext=Path.GetExtension(files.FileName);
  167.     
  168.     string fileExt = Path.GetExtension(files.FileName);
  169.     
  170.     String flph=UploadPath+justnm+justext;
  171.     String flph_phs=HttpContext.Current.Server.MapPath(flph);
  172.     
  173.     //-----------------------------------单文件超出限制大小
  174.     int flSize=files.ContentLength/1024;
  175.     if(flSize>SingleKb)
  176.     {
  177.      aUpsize.Add("文件: "+flnm+", 大小为: "+flSize+" kb.");
  178.      continue;
  179.     }    
  180.     
  181.     if(!Path.HasExtension(flnm))
  182.     {
  183.      aNoExt.Add("文件: "+flnm+", 没有扩展名.");
  184.      continue;
  185.     }
  186.     
  187.     if(!FilterItem(Extension, fileExt, '|'))
  188.     {
  189.      aNotAllowExt.Add("不允许上传的文件扩展: "+flnm);
  190.      continue;
  191.     }
  192.     
  193.     if(File.Exists(flph_phs)) //------------------已存在相同同名文件
  194.     {
  195.      if(AutoRename)
  196.      { 
  197.       int iRename=1;
  198.       while(true)
  199.       {
  200.        String sNameTemp=HttpContext.Current.
  201.         Server.MapPath(UploadPath+justnm+"_"+(iRename++)+justext);
  202.        if(!File.Exists(sNameTemp))
  203.        {
  204.         flph_phs=sNameTemp;
  205.         goto SaveFile;
  206.        } // end if 3
  207.       } // end while
  208.      } // end if 2
  209.     } // end if 1
  210.     SaveFile:;
  211.      files.SaveAs(flph_phs);
  212.   
  213.      String flnmTemp=Path.GetFileName(flph_phs);
  214.      aFinished.Add("文件: "+flnmTemp+" 已上传.");
  215.      
  216.      allFilePath+=UploadPath+flnmTemp+",";
  217.      
  218.      HttpContext.Current.Session[UploadSessionName]=
  219.       DateTime.Now.AddSeconds(Interval);
  220.    } // end if
  221.   } // end for
  222.   goto Report;
  223.   
  224.   Upsize:
  225.    ErrorLabel.Text+="<h2 style='text-align:center;'>上传大小超出限制, 已被终止.</h2>";
  226.    GoBack(GoBackSecond+" 秒后返回, 还有 ", 
  227.     GoBackSecond, GoBackUrl, GobackLabel);
  228.   return;
  229.    
  230.   Report:
  231.    listAl("已上传文件 ", aFinished, UploadDetailsLabel);
  232.    listAl("单文件超出限制大小的有 ", aUpsize, UploadDetailsLabel);
  233.    listAl("没有文件扩展名的有 ", aNoExt, UploadDetailsLabel);
  234.    listAl("不允许上传的文件扩展有 ", aNotAllowExt, UploadDetailsLabel);

  235.    GoBack("操作已完毕, "+GoBackSecond+" 秒后返回, 还有 ", 
  236.     GoBackSecond, GoBackUrl, GobackLabel);

  237.    allFilePath=Regex.Replace(allFilePath,",$","");
  238.    
  239.    if(ReturnFilePath!=null)
  240.    { 
  241.     ReturnFilePath(allFilePath);
  242.    }
  243.  } // end go
  244.  //-----------------------------------end public method
  245.  
  246.  //-----------------------------------begin private variable
  247.  private String allFilePath="";
  248.  
  249.  private Label InfoLabel;
  250.  private Label GobackLabel=new Label();
  251.  private Label UploadDetailsLabel=new Label();
  252.  private Label ErrorLabel=new Label();
  253.  
  254.  private Literal LiteralBox;
  255.  
  256.  private Button SubmitButton;
  257.  
  258.  private HtmlInputFile UpInputItem;
  259.  //-----------------------------------end private variable
  260.  
  261.  //-----------------------------------begin private method
  262.  private bool FilterItem(string filterList, string forFilter, char separater)
  263.  {
  264.   string[] sArray = filterList.Split(separater);
  265.   for(int i = 0, j = sArray.Length; i < j; i++)
  266.   {
  267.    if(string.Compare(sArray[i], forFilter, true)==0)return true;
  268.   }
  269.   return false;
  270.  } // end private bool FilterItem
  271.  
  272.  private void listAl(String sDetail, ArrayList oAl, Label UploadDetailsLabel)
  273.  {
  274.   if(oAl.Count>0)
  275.   {
  276.    UploadDetailsLabel.Text+="<ol><label>"+sDetail+"<b>"+
  277.     oAl.Count+"个</b>.</label>";
  278.    foreach(Object TotalItem in oAl)
  279.    {
  280.     UploadDetailsLabel.Text+="<li>"+TotalItem+"</li>";
  281.    }
  282.    UploadDetailsLabel.Text+="</ol><hr/>";
  283.   }
  284.  }
  285.  
  286.  private void GoBack(String sPrompt, Int32 iSecond, String sUrl, Label GobackLabel)
  287.  {
  288.   if(GobackLabel==nullreturn;
  289.   GobackLabel.Text+="<script type=\"text/javascript\">\n";
  290.   GobackLabel.Text+="//<![CDATA[\n";
  291.   GobackLabel.Text+=var temp=onload;\n";
  292.   GobackLabel.Text+=onload=function(){\n";
  293.   GobackLabel.Text+="  try{temp()}catch(e){}\n";
  294.   GobackLabel.Text+="  fTimer("+iSecond+",'timer', 10);\n";
  295.   GobackLabel.Text+=" }\n";
  296.   GobackLabel.Text+="  function fTimer(iTimestamp, sId, iMs){\n";
  297.   GobackLabel.Text+="  if(!(iTimestamp.constructor==Date)){\n";
  298.   GobackLabel.Text+="   var sqTimeStamp=new Date();\n";
  299.   GobackLabel.Text+="   sqTimeStamp.setSeconds(sqTimeStamp.getSeconds()+iTimestamp);\n";
  300.   GobackLabel.Text+="   iTimestamp=sqTimeStamp;\n";
  301.   GobackLabel.Text+="  }\n";
  302.   GobackLabel.Text+="    var tl=arguments.callee;\n";
  303.   GobackLabel.Text+="    if(typeof sId=='string'){\n";
  304.   GobackLabel.Text+="   var oEle=document.getElementById(sId);\n";
  305.   GobackLabel.Text+="  } else {\n";
  306.   GobackLabel.Text+="   var oEle=sId;\n";
  307.   GobackLabel.Text+="  }\n";
  308.   GobackLabel.Text+="  var dt=new Date();\n";
  309.   GobackLabel.Text+="  var iCk=((iTimestamp.getTime()-dt.getTime())/1000).toFixed(3);\n";
  310.   GobackLabel.Text+="  if(iCk<=0){\n";
  311.   GobackLabel.Text+="   oEle.innerHTML='00.000';\n";
  312.   GobackLabel.Text+="   return false;\n";
  313.   GobackLabel.Text+="  } else {\n";
  314.   GobackLabel.Text+="   oEle.innerHTML=iCk;\n";
  315.   GobackLabel.Text+="   var iTimer=setTimeout(function(){tl(iTimestamp, oEle, iMs)},iMs); \n";
  316.   GobackLabel.Text+="  }\n";
  317.   GobackLabel.Text+=" } // end function fTimer // shawl.qiu script\n";
  318.   GobackLabel.Text+="//]]>\n";
  319.   GobackLabel.Text+="</script>\n";

  320.   GobackLabel.Text+="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
  321.   GobackLabel.Text+="<meta http-equiv=\"refresh\" content=\""+iSecond+";URL="+sUrl+"\">";
  322.   GobackLabel.Text+="<div style=\"display:table;width:100%;background-color:yellow!important;"+
  323.     "color:black!important;text-align:center!important;\">"+
  324.     sPrompt+", <span id='timer'>"+iSecond+"</span>秒 后返回.</div>";
  325.  }
  326.  
  327.  private void GoBack(String sPrompt, Int32 iSecond, bool byReferrer, Label GobackLabel)
  328.  {
  329.   if(GobackLabel==null)return;
  330.   string url = "?";
  331.   if(byReferrer) url = HttpContext.Current.Request.UrlReferrer+"";
  332.   GoBack(sPrompt, iSecond, url, GobackLabel);
  333.  } 
  334.  //-----------------------------------end private method
  335. }
  336. //---------------------------------------------------------------------end class Upload 

文章相关信息:
主题: shawl.qiu c# .net upload class v1.2
发表者: shawl.qiu
电子邮件: shawl.qiu@gmail.com
QQ: 908202921
MSN: btbtd@msn.com
Homepage: http://www.btbtd.org/
Blog: http://blog.csdn.net/btbtd/
发表日期: 2007-2-27 1:00:36
更新日期: 2007-2-27 1:00:36
来源引用: shawl.qiu CSharp DotNet 个人资料管理系统
引用本页: http://gi.2288.org/mod/code/display/Default.aspx?aid=301
关闭
Google
搜索WWW
搜索www.btbtd.org
搜索blog.csdn.net
Powered by shawl.qiu © 2008-2010 the shawl.qiu Javascript Kits
Copyright © 2008-2010 by shawl.qiu