| 正文: |
1. ascx 调用 2. Upload 类 1. ascx 调用 - <!-- DW6 -->
- <%@ Control Language="C#" AutoEventWireup="True" className="xxx" %>
- <%@ Assembly Name = "SQ" %>
- <%@ Assembly Name = "Sys" %>
- <%@ import Namespace="SQ" %>
- <%@ import Namespace="Sys" %>
- <%@ import Namespace="System.Data" %>
- <%@ import Namespace="System.Data.OleDb" %>
- <script runat="server">
- DataTable UpCfgDt = Datum.GetDataTable("select top 1 * from uploadconfig", Sys.Conn);
- void Page_Load(Object s, EventArgs e)
- {
- if(!IsPostBack)
- {
- }
- Upload up = new Upload();
-
- up.Debug = true;
- up.AutoRename = bool.Parse(UpCfgDt.Rows[0]["upAutoRename"]+"");
-
- up.UploadPath = UpCfgDt.Rows[0]["upPath"]+"";
- up.Extension = UpCfgDt.Rows[0]["upExt"]+"";
-
- up.GoBackUrl = UpCfgDt.Rows[0]["upGobackUrl"]+"";
-
- up.UploadSessionName = UpCfgDt.Rows[0]["upSessionName"]+"";
-
- up.Interval = int.Parse(UpCfgDt.Rows[0]["upInterval"]+"");
- up.GoBackSecond = int.Parse(UpCfgDt.Rows[0]["upGobackSecond"]+"");
-
- up.TotalItem = int.Parse(UpCfgDt.Rows[0]["upTotalItem"]+"");
-
- up.TotalKb = int.Parse(UpCfgDt.Rows[0]["upTotalKb"]+"");
- up.SingleKb = int.Parse(UpCfgDt.Rows[0]["upSingleKb"]+"");
-
- up.UploadPlaceHolder = ph;
-
- up.ReturnFilePathWithKb=new OneArgStringDelegate(AddItemToDb);
-
- up.Go();
-
- up = null;
- } // end Page_Load
-
- void AddItemToDb(string ipt)
- {
- bool Debug = false;
-
- string[] PathRge = ipt.Split(',');
-
- if(Debug)
- {
- Response.Write("<li/>AddItemToDb: Ok");
- Response.Write("<li/>ipt: "+ipt);
- Response.Write("<li/>PathRge.Length: "+PathRge.Length);
- } // end if
-
- for(int i=0, j=PathRge.Length; i<j; i++)
- {
- string[] PartRge = PathRge[i].Split(':');
- string UpName = System.IO.Path.GetFileName(PartRge[0]);
-
- if(Debug)
- {
- Response.Write("<li/>UpName: "+UpName);
- Response.Write("<li/>PartRge[0]: "+PartRge[0]);
- Response.Write("<li/>PartRge[1]: "+PartRge[1]);
- } // end if
-
- OleDbConnection oCnn = new OleDbConnection(Sys.Conn);
- OleDbCommand oCmd = new OleDbCommand("insert into upload(upname,uppath,upsizebykb) "+
- "values(@upname,@uppath,@upsizebykb)", oCnn);
-
- OleDbParameter oParamupname = new OleDbParameter("@upname", "OleDbType.Varchar");
- oParamupname.Value = UpName;
- oCmd.Parameters.Add(oParamupname);
-
- OleDbParameter oParamuppath = new OleDbParameter("@uppath", "OleDbType.Varchar");
- oParamuppath.Value = PartRge[0];
- oCmd.Parameters.Add(oParamuppath);
-
- OleDbParameter oParamupsize = new OleDbParameter("@upsizebykb", "OleDbType.Varchar");
- oParamupsize.Value = PartRge[1];
- oCmd.Parameters.Add(oParamupsize);
-
- oCnn.Open();
- oCmd.ExecuteNonQuery();
- oCnn.Close();
- } // end for
-
- } // end void AddItemToDb
-
- </script>
- <div class="UpMain">
- <asp:PlaceHolder id=ph runat=server
- />
- </div>
2. Upload 类 - using System;
- using System.Collections;
- using System.IO;
- using System.Text.RegularExpressions;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- public delegate void OneArgStringDelegate(String Str);
- /*-----------------------------------------------------------------------------------*\
- * shawl.qiu c# .net Upload class v1.3
- \*-----------------------------------------------------------------------------------*/
- //---------------------------------------------------------------------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 class";
- public const string auVersion = "v1.3";
- 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";
- public const string auFirstUpdate = "2007-2-8 v1.1";
- public const string auSecondUpdate = "2007-2-27 v1.2";
- public const string auUpdate3 = "2007-4-29 v1.3";
- //-----------------------end about
- //-----------------------------------end public constant
-
- //-----------------------------------begin public variable
- public bool Debug = false;
- public bool AutoRename=false;
-
- public string UploadPath = "/uploads/";
- public string Extension = ".7z|.rar|.zip|.mp3|.bmp|.gif|.jpg|.jpeg|.png|.txt|.swf";
- public string GoBackUrl = "?";
-
- public string UploadSessionName = "sqUploadCheckInterver";
-
- public int Interval = 10;
- public int GoBackSecond = 10;
- public int TotalItem = 5;
- public int TotalKb = 1024*5;
- public int SingleKb = 1024;
-
- public PlaceHolder UploadPlaceHolder;
-
- public OneArgStringDelegate ReturnFilePath;
- public OneArgStringDelegate ReturnFilePathWithKb;
-
- //-----------------------------------end public variable
-
- //-----------------------------------begin public method
- public void Go()
- {
- if(UploadPlaceHolder!=null)
- {
- UploadPlaceHolder.Controls.Add(ErrorLabel);
- UploadPlaceHolder.Controls.Add(GobackLabel);
- UploadPlaceHolder.Controls.Add(UploadDetailsLabel);
-
- InfoLabel=new Label();
- InfoLabel.Text="<ul>\n"+
- "<li>当前上传路径: <b>"+UploadPath+"</b></li>\n"+
- "<li>允许上传的文件类型<b>: "+Extension+"</b></li>\n"+
- "<li>每次总上传大小最大为 <b>: "+TotalKb+"kb</b>, 每文件最大为 <b>"+
- SingleKb+"kb</b>.</li>\n"+
- "<li>每次上传时间间隔为<b>: "+Interval+"</b>秒.</li>\n"+
- "</ul>";
-
- UploadPlaceHolder.Controls.Add(InfoLabel);
-
- LiteralBox=new Literal();
- LiteralBox.Text="<ol>";
- UploadPlaceHolder.Controls.Add(LiteralBox);
-
- for(int i=0; i<TotalItem; i++)
- {
- LiteralBox=new Literal();
- LiteralBox.Text="<li>";
- UploadPlaceHolder.Controls.Add(LiteralBox);
-
- UpInputItem = new HtmlInputFile();
- UploadPlaceHolder.Controls.Add(UpInputItem);
-
- LiteralBox=new Literal();
- LiteralBox.Text="</li>\n";
- UploadPlaceHolder.Controls.Add(LiteralBox);
- }
-
- LiteralBox=new Literal();
- LiteralBox.Text="</br/>\n";
- UploadPlaceHolder.Controls.Add(LiteralBox);
-
- SubmitButton=new Button();
- SubmitButton.Text="Upload now";
- SubmitButton.Click+=new EventHandler(go);
- SubmitButton.Attributes["onclick"]="javascript:return confirm('现在上传文件吗?')";
- UploadPlaceHolder.Controls.Add(SubmitButton);
-
- LiteralBox=new Literal();
- LiteralBox.Text=" <input type=\"reset\" value=\"reset\""+
- " onclick=\"return confirm('现在重置吗');\" />";
- UploadPlaceHolder.Controls.Add(LiteralBox);
-
- LiteralBox=new Literal();
- LiteralBox.Text="</ol>\n";
- UploadPlaceHolder.Controls.Add(LiteralBox);
- }
- } // end public void UploadBox
-
- public void go(Object s, EventArgs e)
- {
-
- if(HttpContext.Current.Session[UploadSessionName]==null)
- {
- HttpContext.Current.Session[UploadSessionName]=DateTime.Now;
- }
-
- DateTime dtSession=DateTime.Parse(HttpContext.Current.Session[UploadSessionName]+"");
- if(dtSession>DateTime.Now)
- {
- TimeSpan hasInterval=dtSession-DateTime.Now;
-
- GoBack("每次上传时间间隔为 "+Interval+" 秒, 请稍候...",
- hasInterval.Seconds, GoBackUrl, GobackLabel);
- return;
- }
-
- //---------------------检测上传目录是否存在
- String path_phs=HttpContext.Current.Server.MapPath(UploadPath);
- if(!Directory.Exists(path_phs))
- {
- if(InfoLabel!=null)
- {
- InfoLabel.Text+="<h2>指定的上传目录不存在, 操作被取消.</h2>";
- }
- return;
- }
-
- int upTotal=HttpContext.Current.Request.ContentLength/1024;
- int 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>TotalKb) goto Upsize;
-
- for(int 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 fileExt = Path.GetExtension(files.FileName);
-
- String flph=UploadPath+justnm+justext;
- String flph_phs=HttpContext.Current.Server.MapPath(flph);
-
- //-----------------------------------单文件超出限制大小
- int flSize=files.ContentLength/1024;
- if(flSize>SingleKb)
- {
- aUpsize.Add("文件: "+flnm+", 大小为: "+flSize+" kb.");
- continue;
- }
-
- if(!Path.HasExtension(flnm))
- {
- aNoExt.Add("文件: "+flnm+", 没有扩展名.");
- continue;
- }
-
- if(!FilterItem(Extension, fileExt, '|'))
- {
- aNotAllowExt.Add("不允许上传的文件扩展: "+flnm);
- continue;
- }
-
- if(File.Exists(flph_phs)) //------------------已存在相同同名文件
- {
- if(AutoRename)
- {
- int iRename=1;
- while(true)
- {
- String sNameTemp=HttpContext.Current.
- Server.MapPath(UploadPath+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+" 已上传, 大小为 "+flSize+" Kb.");
-
- AllFilePath+=UploadPath+flnmTemp+",";
- AllFilePathWithKb += UploadPath+flnmTemp+":"+flSize+",";
-
- HttpContext.Current.Session[UploadSessionName]=
- DateTime.Now.AddSeconds(Interval);
- } // end if
- } // end for
- goto Report;
-
- Upsize:
- ErrorLabel.Text+="<h2 style='text-align:center;'>上传大小超出限制, 已被终止.</h2>";
- GoBack(GoBackSecond+" 秒后返回, 还有 ",
- GoBackSecond, GoBackUrl, GobackLabel);
- return;
-
- Report:
- listAl("已上传文件 ", aFinished, UploadDetailsLabel);
- listAl("单文件超出限制大小的有 ", aUpsize, UploadDetailsLabel);
- listAl("没有文件扩展名的有 ", aNoExt, UploadDetailsLabel);
- listAl("不允许上传的文件扩展有 ", aNotAllowExt, UploadDetailsLabel);
- GoBack("操作已完毕, "+GoBackSecond+" 秒后返回, 还有 ",
- GoBackSecond, GoBackUrl, GobackLabel);
- AllFilePath = Regex.Replace(AllFilePath,",$","");
- AllFilePathWithKb = Regex.Replace(AllFilePathWithKb,",$","");
-
- if(ReturnFilePath!=null)
- {
- ReturnFilePath(AllFilePath);
- } // end if
-
- if(ReturnFilePathWithKb != null)
- {
- ReturnFilePathWithKb(AllFilePathWithKb);
- } // end if
- } // end go
- //-----------------------------------end public method
-
- //-----------------------------------begin private variable
- private String AllFilePath = "";
- private string AllFilePathWithKb = "";
-
- private Label InfoLabel;
- private Label GobackLabel=new Label();
- private Label UploadDetailsLabel=new Label();
- private Label ErrorLabel=new Label();
-
- private Literal LiteralBox;
-
- private Button SubmitButton;
-
- private HtmlInputFile UpInputItem;
- //-----------------------------------end private variable
-
- //-----------------------------------begin private method
- private bool FilterItem(string filterList, string forFilter, char separater)
- {
- string[] sArray = filterList.Split(separater);
- for(int i = 0, j = sArray.Length; i < j; i++)
- {
- if(string.Compare(sArray[i], forFilter, true)==0)return true;
- }
- return false;
- } // end private bool FilterItem
-
- private void listAl(String sDetail, ArrayList oAl, Label UploadDetailsLabel)
- {
- if(oAl.Count>0)
- {
- UploadDetailsLabel.Text+="<ol><label>"+sDetail+"<b>"+
- oAl.Count+"个</b>.</label>";
- foreach(Object TotalItem in oAl)
- {
- UploadDetailsLabel.Text+="<li>"+TotalItem+"</li>";
- }
- UploadDetailsLabel.Text+="</ol><hr/>";
- }
- }
-
- private void GoBack(String sPrompt, Int32 iSecond, String sUrl, Label GobackLabel)
- {
- if(GobackLabel==null) return;
- GobackLabel.Text+="<script type=\"text/javascript\">\n";
- GobackLabel.Text+="//<![CDATA[\n";
- GobackLabel.Text+=" var temp=onload;\n";
- GobackLabel.Text+=" onload=function(){\n";
- GobackLabel.Text+=" try{temp()}catch(e){}\n";
- GobackLabel.Text+=" fTimer("+iSecond+",'timer', 10);\n";
- GobackLabel.Text+=" }\n";
- GobackLabel.Text+=" function fTimer(iTimestamp, sId, iMs){\n";
- GobackLabel.Text+=" if(!(iTimestamp.constructor==Date)){\n";
- GobackLabel.Text+=" var sqTimeStamp=new Date();\n";
- GobackLabel.Text+=" sqTimeStamp.setSeconds(sqTimeStamp.getSeconds()+iTimestamp);\n";
- GobackLabel.Text+=" iTimestamp=sqTimeStamp;\n";
- GobackLabel.Text+=" }\n";
- GobackLabel.Text+=" var tl=arguments.callee;\n";
- GobackLabel.Text+=" if(typeof sId=='string'){\n";
- GobackLabel.Text+=" var oEle=document.getElementById(sId);\n";
- GobackLabel.Text+=" } else {\n";
- GobackLabel.Text+=" var oEle=sId;\n";
- GobackLabel.Text+=" }\n";
- GobackLabel.Text+=" var dt=new Date();\n";
- GobackLabel.Text+=" var iCk=((iTimestamp.getTime()-dt.getTime())/1000).toFixed(3);\n";
- GobackLabel.Text+=" if(iCk<=0){\n";
- GobackLabel.Text+=" oEle.innerHTML='00.000';\n";
- GobackLabel.Text+=" return false;\n";
- GobackLabel.Text+=" } else {\n";
- GobackLabel.Text+=" oEle.innerHTML=iCk;\n";
- GobackLabel.Text+=" var iTimer=setTimeout(function(){tl(iTimestamp, oEle, iMs)},iMs); \n";
- GobackLabel.Text+=" }\n";
- GobackLabel.Text+=" } // end function fTimer // shawl.qiu script\n";
- GobackLabel.Text+="//]]>\n";
- GobackLabel.Text+="</script>\n";
- GobackLabel.Text+="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
- GobackLabel.Text+="<meta http-equiv=\"refresh\" content=\""+iSecond+";URL="+sUrl+"\">";
- GobackLabel.Text+="<div style=\"display:table;width:100%;background-color:yellow!important;"+
- "color:black!important;text-align:center!important;\">"+
- sPrompt+", <span id='timer'>"+iSecond+"</span>秒 后返回.</div>";
- }
-
- private void GoBack(String sPrompt, Int32 iSecond, bool byReferrer, Label GobackLabel)
- {
- if(GobackLabel==null)return;
- string url = "?";
- if(byReferrer) url = HttpContext.Current.Request.UrlReferrer+"";
- GoBack(sPrompt, iSecond, url, GobackLabel);
- }
- //-----------------------------------end private method
- }
- //---------------------------------------------------------------------end class Upload
|