最近,笔者在忙一个项目的时候,涉及到一个上传的问题,当然这个问题是一个比较常见的问题,也有很多人在这个方面写了很好的文章。在这里,我只写一下自己怎样去用System.Web.UI.HtmlControls.HtmlInputFile 去实现我所想要的功能:
首先,在界面上放上几个控件,用于收集信息:
protected System.Web.UI.WebControls.Button Button1;//上传的按钮 protected System.Web.UI.WebControls.Label Label1;//用于显示信息 protected System.Web.UI.WebControls.Label Label2;//用于显示信息 protected System.Web.UI.WebControls.Label Label3;;//用于显示信息 protected System.Web.UI.WebControls.Label Label4;;//用于显示信息 protected System.Web.UI.HtmlControls.HtmlInputFile File1;//上传控件
同时由于上传涉及到io操作,因此要引入下面的名字空间:
using System.IO;
好了,下面我们开始写程序:
首先我们要判断用户是否选择了要上传文件,我们可用下面这句实现:
if(File1.PostedFile.ContentLength>0)
如果用户有上传的文件,则:
string name = File1.PostedFile.FileName ;//获取输入的文件名字 int i= name.LastIndexOf(".") ; string newname =name.Substring(i) ;//获取文件的扩展名 //改变下面的“c:\\"到你想要保存的地址。 DateTime now=DateTime.Now; string strname=now.Year.ToString()+now.Month.ToString()+now.Day.ToString()+File1.PostedFile.ContentLength.ToString()+newname;//对文件进行重命名。名字为:年+月+日+文件大小。
string path="c:\\"+strname;//设置上传文件的位置,可设置成虚拟目录:
//string path=Server.MapPath("userimage\\")+strname; 存储在指定的虚拟目录 if(File.Exists(path))//判断文件是否存在 { Label1.Text="此文件名在服务器上已存在!!"; Label2.Text=""; Label3.Text=""; return; } File1.PostedFile.SaveAs(path);//存储文件 //取得上传文件的各种属性。 Label1.Text="上传文件名:"+File1.PostedFile.FileName; Label2.Text="上传文件类型:"+File1.PostedFile.ContentType; Label3.Text="上传文件大小:"+File1.PostedFile.ContentLength.ToString();
至此,上传的程序写完了,但是还有一些要注意的地方:
在form 中要加入属性:enctype="multipart/form-data" 否则会出现未将对象引用到实例的错误。完整程序如下:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.IO;
namespace MyHomeWebApp.uploadtest { /// <summary> /// uploadtest 的摘要说明。 /// </summary> public class uploadtest : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Label Label4; protected System.Web.UI.HtmlControls.HtmlInputFile File1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 }
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load);
} #endregion
private void Button1_Click(object sender, System.EventArgs e) { try { if(File1.PostedFile.ContentLength>0) { string name = File1.PostedFile.FileName ; int i= name.LastIndexOf(".") ; string newname =name.Substring(i) ; //改变下面的“c:\\"到你想要保存的地址。 DateTime now=DateTime.Now; string strname=now.Year.ToString()+now.Month.ToString()+now.Day.ToString()+File1.PostedFile.ContentLength.ToString()+newname;
string path="c:\\"+strname; if(File.Exists(path)) { Label1.Text="此文件名在服务器上已存在!!"; Label2.Text=""; Label3.Text=""; return; } File1.PostedFile.SaveAs(path); //取得上传文件的各种属性。 Label1.Text="上传文件名:"+File1.PostedFile.FileName; Label2.Text="上传文件类型:"+File1.PostedFile.ContentType; Label3.Text="上传文件大小:"+File1.PostedFile.ContentLength.ToString(); } } catch(Exception err) { Label1.Text=err.Message; Label1.Text=err.Source; Label3.Text=err.HelpLink; } } } }

|