📄 fileprocessbar.aspx.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 + -