📄 上传基础.txt
字号:
}
}
/// <summary>
/// 已上传大小
/// </summary>
public long BytesRead
{
get
{
return bytesRead;
}
}
/// <summary>
/// 上传状态
/// </summary>
public UploadState State
{
get
{
return state;
}
}
/// <summary>
/// 上传开始时间
/// </summary>
public DateTime Start
{
get
{
return start;
}
}
/// <summary>
/// 唯一标志当前上传的UploadID
/// </summary>
string UploadId
{
get
{
return uploadId;
}
}
}
}
3.使用页面Default.aspx
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="Upload._Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Simple Upload Sample</title>
<style>.progressBar {
WIDTH: 250px; HEIGHT: 18px
}
.progressInfo {
BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 9pt; OVERFLOW: hidden; BORDER-LEFT: #000000 1px solid; WIDTH: 250px; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 1px solid; POSITION: absolute; HEIGHT: 18px; TEXT-ALIGN: center
}
.progress {
OVERFLOW: hidden; WIDTH: 0%; HEIGHT: 18px; BACKGROUND-COLOR: #5fff3f
}
</style>
<script src="xmlLib.js"></script>
<script>
var r = "传输: {0}K 还未完成";
var s = "您的文件已经上传完成";
var t = "上传失败";
function progressBar()
{
this.totalSize = 100;
this.sizeCompleted = 0;
this.percentDone = "0%";
this.setSize = function(totalSize, size)
{
var oProgressInfo = document.getElementById("progressInfo");
var oProgress = document.getElementById("progress");
if (oProgress == null || oProgressInfo == null)
return;
if (totalSize <= 0)
return;
this.totalSize = totalSize;
this.sizeCompleted = size;
if (size < 0)
this.sizeCompleted = 0;
else if (size > this.totalSize)
this.sizeCompleted = this.totalSize;
var sizeLeft = 0;
var progressInfoText = "";
sizeLeft = this.totalSize - this.sizeCompleted;
this.percentDone = Math.round(size / this.totalSize * 100) + "%";
oProgress.style.width = this.percentDone;
if (sizeLeft > 0)
progressInfoText = r.replace("{0}", sizeLeft);
else
progressInfoText = s;
oProgressInfo.innerHTML = progressInfoText;
}
this.UploadError = function()
{
var oProgressInfo = document.getElementById("progressInfo");
var oProgress = document.getElementById("progress");
if (oProgressInfo != null)
oProgressInfo.innerHTML = t;
if (oProgress != null)
oProgress.style.width = "0";
}
this.UploadComplete = function()
{
var oProgressInfo = document.getElementById("progressInfo");
var oProgress = document.getElementById("progress");
if (oProgressInfo != null)
oProgressInfo.innerHTML = s;
if (oProgress != null)
oProgress.style.width = "100%";
}
}
var iTimerID = null;
var xmlHttp = XmlHttpPool.pick();
var url = "progress.aspx?UploadID=<%=Request.QueryString["UploadID"]%>"
var pb = new progressBar();
function LoadProgressInfo()
{
try
{
xmlHttp.open("GET", url + "&t=" + Math.random(), true);
xmlHttp.send(null);
xmlHttp.onreadystatechange = function()
{
LoadData(xmlHttp);
}
}
catch(e)
{
alert(e)
}
}
function LoadData(xmlhttp)
{
if (xmlhttp.readyState == 4)
{
iTimerID = window.setTimeout("LoadProgressInfo()", 500);
try{
eval(xmlhttp.responseText);
}
catch(e)
{
alert(e)
}
}
}
function ClearTimer()
{
if (iTimerID != null)
{
window.clearTimeout(iTimerID);
iTimerID = null;
}
}
function UploadCancel()
{
location.href = location.href;
}
</script>
</HEAD>
<body>
<form method="post" target="uploadData" runat="server">
<P><INPUT id="uploadFile" type="file" runat="server">
</P>
<div class="progressBar" id="progressBar">
<div class="progressInfo" onselectstart="return false;" id="progressInfo"></div>
<FONT face="宋体"></FONT>
<div class="progress" id="progress"></div>
</div>
<P><asp:button id="btnUpload" runat="server" Text=" 上传 "></asp:button>
<INPUT id="btnUpload" onclick="UploadCancel()" type="button" value=" 取消 ">
</P>
<iframe name="uploadData" src="about:blank"></iframe></form>
</body>
</HTML>
4.Default.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;
namespace Upload
{
/// <summary>
/// 上传测试页面
/// </summary>
public class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnUpload;
protected System.Web.UI.HtmlControls.HtmlInputFile uploadFile;
private void Page_Load(object sender, System.EventArgs e)
{
// 使用UploadID来唯一标识是当前的上传
//
if (Request.QueryString["UploadID"] == null)
Response.Redirect("Default.aspx?UploadID=" + Guid.NewGuid().ToString());
// 当提交的时候,开始加载进度条
//
btnUpload.Attributes.Add("onclick", "window.setTimeout('LoadProgressInfo()', 500)");
}
#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.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void uploadButton_ServerClick(object sender, System.EventArgs e)
{
}
private void btnUpload_Click(object sender, System.EventArgs e)
{
// 后端处理方法和普通的上传是一样的
//
string filename = this.uploadFile.PostedFile.FileName;
filename = filename.Substring(filename.LastIndexOf("\\"));
string FullPath=Server.MapPath("") + filename;
this.uploadFile.PostedFile.SaveAs(FullPath);
Response.Write("上传文件:" + filename);
// 上传完后使用脚本通知前端进度条
//
Response.Write("<script>parent.pb.UploadComplete();parent.ClearTimer();</script>");
Response.End();
}
}
}
5.Progress.aspx
<%@ Page language="c#" Codebehind="Progress.aspx.cs" AutoEventWireup="false" Inherits="Upload.Progress" %>
6.Progress.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 Openlab.Web.Upload;
namespace Upload
{
/// <summary>
/// 上传进度反映页面
/// </summary>
public class Progress : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
string uploadId = Request.QueryString["UploadID"];
string scriptText = "";
string scriptUploading = "pb.setSize({0}, {1});";
string scriptClearTimer = "ClearTimer();";
string scriptUploadComplete = "pb.UploadComplete();" + scriptClearTimer;
string scriptUploadError = "pb.UploadError();";
string length = "";
string read = "";
Openlab.Web.Upload.Progress progress = HttpUploadModule.GetProgress(uploadId, Application);
if (progress != null)
{
// 如果正在接收数据,利用脚本来通知前端进度条
//
if (progress.State == UploadState.ReceivingData)
{
length = (progress.ContentLength / 1024).ToString();
read = (progress.BytesRead / 1024).ToString();
scriptText = string.Format(scriptUploading, length, read);
}
else if(progress.State == UploadState.Complete)
{
scriptText = scriptUploadComplete;
}
else
{
scriptText = scriptUploadError;
}
}
else
{
//scriptText = scriptUploadError;
}
Response.Clear();
Response.Write(scriptText);
Response.End();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -