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
- using System;
- using System.Collections;
- using System.Data;
- using System.IO;
- using System.Text.RegularExpressions;
- using System.Web;
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu c# .net upload v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------------------------------------------begin class upload
- public class upload
- {
- //-----------------------------------begin event
- public upload()
- {
- }
- ~upload()
- {
- }
- //-----------------------------------end event
- //-----------------------------------begin public constant
- //-----------------------begin about
- public const string auSubject="shawl.qiu c# .net upload";
- public const string auVersion="v1.0";
- public const string au="shawl.qiu";
- public const string auEmail="shawl.qiu@gmail.com";
- public const string auBlog="http://blog.csdn.net/btbtd";
- public const string auCreateDate="2007-1-30";
- //-----------------------end about
- //-----------------------------------end public constant
- //-----------------------------------begin private constant
- //-----------------------------------end private constant
- //-----------------------------------begin public static method
- //-----------------------------------end public static method
- //-----------------------------------begin private static method
- //-----------------------------------end private static method
- //-----------------------------------begin public variable
- public Boolean debug=false;
- public Boolean autorename=false;
- public String path="/uploads/";
- public String ext="7z,rar,zip,mp3,bmp,gif,jpg,jpeg,png,txt,swf";
- public String goback_url="?";
- public String allFilePath="";
- public Int32 interval=10;
- public Int32 goback_second=10;
- public Int32 item=5;
- public Int32 totalsize=1024*5;
- public Int32 singlesize=1024;
- //-----------------------------------end public variable
- //-----------------------------------begin public method
- public void info(System.Web.UI.HtmlControls.HtmlContainerControl oSpan)
- {
- oSpan.InnerHtml="<ol>"+
- "<li>允许上传的文件类型<b>: "+this.ext+"</b></li>"+
- "<li>每次总上传大小最大为 <b>: "+this.totalsize+"kb</b>, 每文件最大为 <b>"+
- this.singlesize+"kb</b>.</li>"+
- "<li>每次上传时间间隔为<b>: "+this.interval+"</b>秒.</li>"+
- "</ol>";
- }
- public void getItem(System.Web.UI.WebControls.Repeater rpt)
- {
- DataTable dt = new DataTable();
- DataRow dr;
- dt.Columns.Add(new DataColumn("id", typeof(Int32)));
- for (int i = 0; i < this.item; i++)
- {
- dr = dt.NewRow();
- dr[0] = i;
- dt.Rows.Add(dr);
- } // end for
- rpt.DataSource=new DataView(dt);
- rpt.DataBind();
- } // end public void getItem
- public void go()
- {
- if(HttpContext.Current.Session["sqUpFl"]==null)
- {
- HttpContext.Current.Session["sqUpFl"]=DateTime.Now;
- }
- DateTime dtSession=DateTime.Parse(HttpContext.Current.Session["sqUpFl"]+"");
- if(dtSession>DateTime.Now)
- {
- TimeSpan hasInterval=dtSession-DateTime.Now;
- finished("每次上传时间间隔为 "+this.interval+" 秒, 请稍候...",
- hasInterval.Seconds, this.goback_url);
- goto End;
- }
- //---------------------检测上传目录是否存在
- String path_phs=HttpContext.Current.Server.MapPath(path);
- if(!Directory.Exists(path_phs))
- {
- HttpContext.Current.
- Response.Write("<h2>指定的上传目录不存在, 操作被取消.</h2>");
- goto End;
- }
- Int32 upTotal=HttpContext.Current.Request.ContentLength/1024;
- Int32 total=HttpContext.Current.Request.Files.AllKeys.Length;
- ArrayList aUpsize=new ArrayList();
- ArrayList aNoExt=new ArrayList();
- ArrayList aNotAllowExt=new ArrayList();
- ArrayList aFinished=new ArrayList();
- if(upTotal>this.totalsize) goto Upsize;
- for(Int32 i=0; i<total; i++)
- {
- System.Web.HttpPostedFile files=HttpContext.Current.Request.Files[i];
- if(files.ContentLength>0)
- {
- String flnm=Path.GetFileName(files.FileName);
- String justnm=Path.GetFileNameWithoutExtension(files.FileName);
- String justext=Path.GetExtension(files.FileName);
- String flph=this.path+justnm+justext;
- String flph_phs=HttpContext.Current.Server.MapPath(flph);
- //-----------------------------------单文件超出限制大小
- Int32 flSize=files.ContentLength/1024;
- if(flSize>this.singlesize)
- {
- aUpsize.Add("文件: "+flnm+", 大小为: "+flSize+" kb.");
- continue;
- }
- if(!Path.HasExtension(flnm))
- {
- aNoExt.Add("文件: "+flnm+", 没有扩展名.");
- continue;
- }
- String extTemp=Regex.Replace(justext,"^.","");
- if(!Regex.IsMatch(this.ext, "//b"+extTemp+"//b", RegexOptions.IgnoreCase))
- {
- aNotAllowExt.Add("不允许上传的文件扩展: "+flnm);
- continue;
- }
- if(File.Exists(flph_phs)) //------------------已存在相同同名文件
- {
- if(autorename)
- {
- Int32 iRename=1;
- while(true)
- {
- String sNameTemp=HttpContext.Current.
- Server.MapPath(this.path+justnm+"_"+(iRename++)+justext);
- if(!File.Exists(sNameTemp))
- {
- flph_phs=sNameTemp;
- goto SaveFile;
- } // end if 3
- } // end while
- } // end if 2
- } // end if 1
- SaveFile:;
- files.SaveAs(flph_phs);
- String flnmTemp=Path.GetFileName(flph_phs);
- aFinished.Add("文件: "+flnmTemp+" 已上传.");
- this.allFilePath+=this.path+flnmTemp+",";
- HttpContext.Current.Session["sqUpFl"]=
- DateTime.Now.AddSeconds(this.interval);
- } // end if
- } // end for
- goto Report;
- Upsize:
- HttpContext.Current.Response.Write("<h2>上传大小超出限制, 已被终止.</h2>");
- goto End;
- Report:
- listAl("已上传文件 ", aFinished);
- listAl("单文件超出限制大小的有 ", aUpsize);
- listAl("没有文件扩展名的有 ", aNoExt);
- listAl("不允许上传的文件扩展有 ", aNotAllowExt);
- goto Finished;
- Finished:
- finished("操作已完毕", this.goback_second, this.goback_url);
- End:
- this.allFilePath=Regex.Replace(this.allFilePath,",$","");
- } // end go
- //-----------------------------------end public method
- //-----------------------------------begin private variable
- //-----------------------------------end private variable
- //-----------------------------------begin private method
- private void listAl(String sDetail, ArrayList oAl)
- {
- if(oAl.Count>0)
- {
- HttpContext.Current.Response.Write("<ol><label>"+sDetail+"<b>"+
- oAl.Count+"个</b>.</label>");
- foreach(Object item in oAl)
- {
- HttpContext.Current.Response.Write("<li>"+item+"</li>");
- }
- HttpContext.Current.Response.Write("</ol><hr/>");
- }
- }
- private void finished(String sPrompt, Int32 iSecond, String sUrl)
- {
- HttpContext.Current.Response.Write("<script type=/"text/javascript/">/n");
- HttpContext.Current.Response.Write("//<![CDATA[/n");
- HttpContext.Current.Response.Write(" var temp=onload;/n");
- HttpContext.Current.Response.Write(" onload=function(){/n");
- HttpContext.Current.Response.Write(" try{temp()}catch(e){}/n");
- HttpContext.Current.Response.Write(" fTimer("+iSecond+",'timer', 10);/n");
- HttpContext.Current.Response.Write(" }/n");
- HttpContext.Current.Response.Write(" function fTimer(iTimestamp, sId, iMs){/n");
- HttpContext.Current.Response.Write(" if(!(iTimestamp.constructor==Date)){/n");
- HttpContext.Current.Response.Write(" var sqTimeStamp=new Date();/n");
- HttpContext.Current.Response.Write(" sqTimeStamp.setSeconds(sqTimeStamp.getSeconds()+iTimestamp);/n");
- HttpContext.Current.Response.Write(" iTimestamp=sqTimeStamp;/n");
- HttpContext.Current.Response.Write(" }/n");
- HttpContext.Current.Response.Write(" var tl=arguments.callee;/n");
- HttpContext.Current.Response.Write(" if(typeof sId=='string'){/n");
- HttpContext.Current.Response.Write(" var oEle=document.getElementById(sId);/n");
- HttpContext.Current.Response.Write(" } else {/n");
- HttpContext.Current.Response.Write(" var oEle=sId;/n");
- HttpContext.Current.Response.Write(" }/n");
- HttpContext.Current.Response.Write(" var dt=new Date();/n");
- HttpContext.Current.Response.Write(" var iCk=((iTimestamp.getTime()-dt.getTime())/1000).toFixed(3);/n");
- HttpContext.Current.Response.Write(" if(iCk<=0){/n");
- HttpContext.Current.Response.Write(" oEle.innerHTML='00.000';/n");
- HttpContext.Current.Response.Write(" return false;/n");
- HttpContext.Current.Response.Write(" } else {/n");
- HttpContext.Current.Response.Write(" oEle.innerHTML=iCk;/n");
- HttpContext.Current.Response.Write(" var iTimer=setTimeout(function(){tl(iTimestamp, oEle, iMs)},iMs); /n");
- HttpContext.Current.Response.Write(" }/n");
- HttpContext.Current.Response.Write(" } // end function fTimer // shawl.qiu script/n");
- HttpContext.Current.Response.Write("//]]>/n");
- HttpContext.Current.Response.Write("</script>/n");
- HttpContext.Current.
- Response.Write("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=utf-8/" />");
- HttpContext.Current.
- Response.Write("<meta http-equiv=/"refresh/" content=/""+iSecond+";URL="+sUrl+"/">");
- HttpContext.Current.
- Response.Write("<div style=/"display:table;width:100%;background-color:yellow!important;"+
- "color:black!important;text-align:center!important;/">"+
- sPrompt+", <span id='timer'>"+iSecond+"</span>秒 后返回.</div>");
- }
- //-----------------------------------end private method
- //-----------------------------------begin public property
- //-----------------------------------end public property
- //-----------------------------------begin private property
- //-----------------------------------end private property
- }
- //---------------------------------------------------------------------end class upload
- <%@ Page Language="C#" src="cs/upload.cs" AutoEventWireup="True" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- </head>
- <body>
- <script runat="server">
- void Page_Load(Object s, EventArgs e)
- {
- upload up=new upload();
- up.item=5;
- up.info(spnInfo);
- up.getItem(aspRpt);
- up=null;
- }
- void btn_up(Object s, EventArgs e)
- {
- upload up=new upload();
- up.debug=true;
- up.path="/uploads/"; // 上传目录;
- up.goback_url=Request.Url+""; // 上传完毕后返回的 URL
- up.goback_second=20; // 上传后返回间隔
- up.interval=20; // 每次上传间隔, 单位秒
- up.autorename=true; // 自动重命名;
- up.go(); // 执行上传操作;
- //Response.Write(up.allFilePath);// 返回已上传的所有文件路径, 以逗号(,)分隔.
- up=null;
- }
- </script>
- <form runat="server">
- <span id='spnReport' runat='server'></span>
- <span id='spnInfo' runat='server'></span>
- <ol>
- <asp:Repeater id="aspRpt" runat="server">
- <ItemTemplate>
- <li><input type='file' runat='server' /></li>
- </ItemTemplate>
- </asp:Repeater>
- </ol>
- <li/><input type='submit' OnServerClick="btn_up" runat='server' />
- </form>
- </body>
- </html>