自写的上传自定义控件

控件类文件:

======================================================================================

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Collections.Specialized;
 
namespace PublicControls
{
     ///<summary>
     /// UpLoadFile 的摘要说明。
     ///</summary>
     [DefaultProperty("Text"),
     ToolboxData("<PublicControls:UpLoadFile runat=server></PublicControls:UpLoadFile>")]
     public class UpLoadFile : System.Web.UI.WebControls.WebControl,IPostBackDataHandler,IPostBackEventHandler
     {
         #region预定义
         private string _url;
         private string _type;
         private string _uploadpagepath;
         private string _uploadsavepath;
         private string js;
 
         ///<summary>
         ///委托页面索引事件
         ///</summary>
         public event EventHandler UrlChanged;
 
         #endregion
 
         #region属性
         ///<summary>
         ///关联的文件的Url地址
         ///</summary>
         public string Url
         {
              get
              {
                   if ((string)(ViewState["Url"]+"")!="")
                   {
                       _url = (string)ViewState["Url"];
                   }
                   return _url;
              }
              set
              {
                   _url = value;
                   ViewState["Url"] = _url;
              }
         }
 
         ///<summary>
         ///上传类型,all为所有类型,自定义使用‘,’分割开,如:“jpg,gif,jpeg,png”
         ///</summary>
         public string Type
         {
              get
              {
                   if ((string)(ViewState["Type"]+"")!="")
                   {
                       _type = (string)ViewState["Type"];
                   }
                   else
                   {
                       _type = "all";
                   }
                   return _type;
              }
              set
              {
                   _type = value;
                   ViewState["Type"] = _type;
              }
         }
 
         ///<summary>
         ///上传模态文件地址
         ///</summary>
         public string UpLoadPagePath
         {
              get
              {
                   if ((string)(ViewState["UpLoadPagePath"]+"")!="")
                   {
                       _uploadpagepath = (string)ViewState["UpLoadPagePath"];
                   }
                   else
                   {
                       _uploadpagepath = "UploadControl.aspx";
                   }
                   return _uploadpagepath;
              }
              set
              {
                   _uploadpagepath = value;
                   ViewState["UpLoadPagePath"] = _uploadpagepath;
              }
          }
 
         ///<summary>
         ///上传的文件保存地址
         ///</summary>
         public string UpLoadSavePath
         {
              get
              {
                   if ((string)(ViewState["UpLoadSavePath"]+"")!="")
                   {
                       _uploadsavepath = (string)ViewState["UpLoadSavePath"];
                   }
                   else
                   {
                       _uploadsavepath = "Upload";
                   }
                   return _uploadsavepath;
              }
              set
              {
                   _uploadsavepath = value;
              }
         }
 
         #endregion
 
         #region事件
 
         ///<summary>
         ///获取回发的数据
         ///</summary>
         ///<param name="postDataKey"></param>
         ///<param name="values"></param>
         ///<returns></returns>
         public bool LoadPostData(String postDataKey, NameValueCollection values)
         {
              if(Url != values[this.UniqueID])
              {
                   Url = values[this.UniqueID];
                   return true;
              }
              else
              {
                   return false;
              }
        
         }
 
         ///<summary>
         ///数据回发事件
         ///</summary>
         public void RaisePostDataChangedEvent()
         {
              OnUrlChanged(System.EventArgs.Empty);
         }
 
         ///<summary>
         ///回送事件
         ///</summary>
         ///<param name="e"></param>
         public void RaisePostBackEvent(string e)
         {
         }
 
         ///<summary>
         ///输出预处理
         ///</summary>
         ///<param name="e"></param>
         protected override void OnPreRender(EventArgs e)
         {
              js = "";
              js += "<script>";
              js += "function OpenModal(){";
              js += "var k = window.showModalDialog('"+UpLoadPagePath+"?type="+Type+"&savepath="+UpLoadSavePath+"','','dialogHeight:120px;status:no');";
              js += "if(k!=null)";
              js += "{ document.all."+this.UniqueID+".value = k;}";
              js += "}";
              js += "</script>";
        
         }
 
         ///<summary>
         ///引发事件方法
         ///</summary>
         ///<param name="e"></param>
         protected void OnUrlChanged(EventArgs e)
         {
              if(UrlChanged!=null)
              {
                   UrlChanged(this,e);
              }
         }
 
         #endregion
 
         #region输出
         ///<summary>
         ///将此控件呈现给指定的输出参数。
         ///</summary>
         ///<param name="output">要写出到的 HTML 编写器 </param>
         protected override void Render(HtmlTextWriter output)
         {
              string outputstring = "";
    
              outputstring += js;
              outputstring += "<input name = "+this.UniqueID+" type = 'text' value = '"+this.Url+"'>";
              outputstring += "<input type = 'button' value='上传' onclick='OpenModal()'>";
              output.Write(outputstring);
         }
         #endregion
     }
}
 模态加载文件:
====================================================================================
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>UpLoadControl</title>
  <script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
 if(!Page.IsPostBack)
 {
  string type = Request.QueryString["type"];
  if (type=="all")
  {
   er.ValidationExpression = ".*";
  }
  else
  {
   string[] types;
   types = type.Split(',');
   string typestr = "";
   for(int i = 0;i<types.Length;i++)
   {
    typestr += "//."+types[i];
    if(i<types.Length-1)
    {
     typestr += "|";
    }
   }
   
   er.ValidationExpression = ".*("+typestr+")";
  }
 }
}
private void btnClick(object sender,System.EventArgs e)
{
 Page.Validate();
 if(Page.IsValid)
 {
 string savepath = Request.QueryString["savepath"];
 string url=savepath+"/"+ UpLoad(savepath);
 Response.Write("<script>window.returnValue = '"+url+"'</");
 Response.Write("script>");
 Response.Write("<script>window.close()</");
 Response.Write("script>");
 }
}
string UpLoad(string Path)
{
 string msg = null;
 if(UpfileBox.PostedFile.ContentLength>0)
 {
  try
  {
   Path = Server.MapPath(Path)+"/";
   string fileName = DateTime.Now.ToString("yyyMMddhhmmss")+DateTime.Now.Millisecond.ToString(); //生成时间文件名
   string fileSub = UpfileBox.PostedFile.FileName;   //获得上传文件路径和文件名
   int i = fileSub.Split('.').Length;      //以‘.’为分割,分割文件本地路径
   fileSub = "."+fileSub.Split('.')[i-1].ToString();  //最后一个‘.’以后的部分作为文件的后缀
   UpfileBox.PostedFile.SaveAs(Path+fileName+fileSub);  //保存文件
   msg = fileName+fileSub;         //将文件名赋予msg变量准备返回
  }
  catch
  {
   msg = "";
  }
  finally
  {
  }
 }
 else
 {
  msg = "";
 }
 UpfileBox.Dispose();
 return msg;
  }
  </script>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  <base target="_self">
 </HEAD>
 <body>
  <form id="Form1" method="post" encType="multipart/form-data" runat="server">
   <P align="center"><BR>
    <INPUT id="UpfileBox" type="file" name="File1" runat="server">
    <asp:button id="btn" onclick="btnClick" runat="server" Text="上传"></asp:button><asp:regularexpressionvalidator id="er" runat="server" ValidationExpression=".*" Display="Dynamic" ControlToValidate="UpfileBox"
     ErrorMessage="上传的文件错误"></asp:regularexpressionvalidator></P>
  </form>
 </body>
</HTML>
posted @ 2006-04-21 13:05  ZetaChow晓代码  阅读(168)  评论(0编辑  收藏  举报