⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileprocessbar.aspx.cs

📁 ASP C#代码实例 适合初学人士学习使用
💻 CS
字号:
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 Example_12_9
{
	/// <summary>
	/// FileProcessBar 的摘要说明。
	/// </summary>
	public class FileProcessBar : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.HyperLink lnkReload;
		protected System.Web.UI.WebControls.CustomValidator cusValTheFile;
		protected System.Web.UI.WebControls.TextBox edInfo;
		protected System.Web.UI.WebControls.RequiredFieldValidator reqValInfo;
		protected System.Web.UI.WebControls.CheckBox chbImportant;
		protected System.Web.UI.WebControls.Button btnUpload;
		protected System.Web.UI.WebControls.Panel panUpload;
		protected System.Web.UI.WebControls.LinkButton btnRefresh;
		protected System.Web.UI.WebControls.Label lblFilename;
		protected System.Web.UI.WebControls.Label lblProgress;
		protected System.Web.UI.WebControls.Panel panProgressBar;
		protected System.Web.UI.WebControls.Button btnCancel;
		protected System.Web.UI.WebControls.Panel panInfo;
		protected System.Web.UI.WebControls.Label lblResult;
		protected System.Web.UI.WebControls.HyperLink lbkReturn;
		protected System.Web.UI.WebControls.Panel panResult;
		protected System.Web.UI.WebControls.Literal litRefreshJS;
		protected System.Web.UI.HtmlControls.HtmlInputFile theFile;
	
		// determin how often Progress Info will be refreshed
		const int RefreshTime = 2000;

		// determine, which panel to show
		public enum PageMode { UploadForm, Uploading, Result }
		public PageMode pageMode
		{
			get
			{
				object o = ViewState["pageMode"];
				return (o==null) ? PageMode.UploadForm : (PageMode) o;
			}
			set
			{
				ViewState["pageMode"] = value;
				switch (value) 
				{
					case PageMode.UploadForm:	panResult.Visible = panInfo.Visible = !(panUpload.Visible = true); break;
					case PageMode.Uploading:
						// initialize fields
						litRefreshJS.Text = String.Format("<script>setTimeout(\"{0}\", {1});</script>", Page.GetPostBackClientEvent(btnRefresh, ""), RefreshTime);
						panResult.Visible = panUpload.Visible = !(panInfo.Visible = true);
						panProgressBar.Width = 0;
						break;
					case PageMode.Result:
						// result information
						litRefreshJS.Text = "";
						Session.Remove("FileUploadThread");
						panUpload.Visible = panInfo.Visible = !(panResult.Visible = true);
						break;
				}
			}
		}

		// how many bytes has been uploaded.
		public long BytesRead
		{
			get { object o = ViewState["BytesRead"]; return (o==null) ? 0 : (long)o; }
			set { ViewState["BytesRead"] = value; }
		}

		private void Page_Load(object sender, System.EventArgs e)
		{
			if (!IsPostBack)
			{
				if (Session["FileUploadThread"] != null) 
				{
					// this users has the session, possible there's an unfinished file upload
					lblResult.Text = "文件正在上载过程中……";
					litRefreshJS.Text = "";
					pageMode = PageMode.Result;
				}
				else  pageMode = PageMode.UploadForm;
			}
		}

		private void btnUpload_Click(object sender, System.EventArgs e)
		{
			if (theFile.PostedFile.ContentLength==0) return;

			lblFilename.Text = Path.GetFileName(theFile.PostedFile.FileName);
			lblProgress.Text = String.Format("{0} of {1} bytes (0 %)", 0, theFile.PostedFile.InputStream.Length);
			string dir = MapPath("files/");
			if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);

			Session["FileUploadThread"] = new FileUploadThread(dir + lblFilename.Text, theFile.PostedFile.InputStream);
			pageMode = PageMode.Uploading;
		}

		private void btnRefresh_Click(object sender, System.EventArgs e)
		{	
			FileUploadThread fut = (FileUploadThread) Session["FileUploadThread"];

			if (!fut.Uploaded)
			{
				litRefreshJS.Text = String.Format("<script>setTimeout(\"{0}\", {1});</script>", Page.GetPostBackClientEvent(btnRefresh, ""), RefreshTime);
				lblProgress.Text = String.Format("{0} of {1} bytes ({2} %)", fut.BytesRead, fut.Length, fut.Percent);
				panProgressBar.Width = 3 * fut.Percent;
			}
			else 
			{
				if (fut.Exception == null) 
					lblResult.Text = String.Format("\"<a href='files/{0}'>{0}</a>\" 文件上载成功!<br>文件是 {1}<br><br>{2}", lblFilename.Text, (chbImportant.Checked) ? "重要的" : "不重要的", edInfo.Text);
				else
					lblResult.Text = String.Format("上载文件错误,错误信息如下: {0}<br>{1}", fut.Exception.GetType(), fut.Exception.Message);

				pageMode = PageMode.Result;
			}
		}

		private void btnCancel_Click(object sender, System.EventArgs e)
		{
			FileUploadThread fut = (FileUploadThread) Session["FileUploadThread"];
			if (fut != null) fut.Cancel();

			lblResult.Text = "上载文件已经被取消!";
			pageMode = PageMode.Result;
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{    
			this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
			this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
			this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -