亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 上傳基礎(chǔ).txt

?? C# 是創(chuàng)新性的新式編程語言
?? TXT
?? 第 1 頁 / 共 2 頁
字號(hào):
進(jìn)度的上傳使用

1.組件HttpUploadModule.cs,Progress.cs

2.頁面Default.* Progress.*


1.組件方面(HttpUploadModule.cs)
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Globalization;
using System.IO;
using System.Text;
using System.Web;

using System.Reflection;

namespace Openlab.Web.Upload
{
	/// <summary>
	/// 給asp.net默認(rèn)的上傳組件加上進(jìn)度條反映
	/// </summary>
	/// <Author>寶玉 (http://www.webuc.net)</Author>
	/// <Links>
	/// http://www.cnforums.net
	/// http://www.communtiyserver.cn
	/// http://blog.joycode.com
	/// </Links>
	public class HttpUploadModule: IHttpModule
	{
		public HttpUploadModule()
		{
			
		}

		public void Init(HttpApplication application)
		{
			application.BeginRequest += new EventHandler(this.Application_BeginRequest);
			application.EndRequest += new EventHandler(this.Application_EndRequest);
			application.Error += new EventHandler(this.Application_Error);
		}

		public void Dispose()
		{
		}

		private void Application_BeginRequest(Object sender, EventArgs e)
		{
			HttpApplication app = sender as HttpApplication;
			HttpWorkerRequest request = GetWorkerRequest(app.Context);
			Encoding encoding = app.Context.Request.ContentEncoding;

			int bytesRead = 0; // 已讀數(shù)據(jù)大小
			int read; // 當(dāng)前讀取的塊的大小
			int count = 8192; // 分塊大小
			byte[] buffer; // 保存所有上傳的數(shù)據(jù)
			string uploadId; // 唯一標(biāo)志當(dāng)前上傳的ID
			Progress progress; // 記錄當(dāng)前上傳的進(jìn)度信息

			if (request != null)
			{
				// 返回 HTTP 請(qǐng)求正文已被讀取的部分。
				//
				byte[] tempBuff = request.GetPreloadedEntityBody();
				
				// 如果是附件上傳
				//
				if (
					tempBuff != null 
					&& IsUploadRequest(app.Request)
					)
				{
					// 獲取上傳大小
					// 
					long length = long.Parse(request.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength));
					// 當(dāng)前上傳的ID,用來唯一標(biāo)志當(dāng)前的上傳
					// 用此UploadID,可以通過其他頁面獲取當(dāng)前上傳的進(jìn)度
					//
					uploadId = app.Context.Request.QueryString["UploadID"];
					
					// 開始記錄當(dāng)前上傳狀態(tài)
					//
					progress = new Progress(length, uploadId);
					progress.SetState(UploadState.ReceivingData);
					
					buffer = new byte[length];
					count = tempBuff.Length; // 分塊大小

					// 將已上傳數(shù)據(jù)復(fù)制過去
					//
					Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, count);

					// 開始記錄已上傳大小
					//
					bytesRead = tempBuff.Length;
					progress.SetBytesRead(bytesRead);
					SetProgress(uploadId, progress, app.Application);

					// 循環(huán)分塊讀取,直到所有數(shù)據(jù)讀取結(jié)束
					//
					while (request.IsClientConnected() &&
						!request.IsEntireEntityBodyIsPreloaded() &&
						bytesRead < length
						)
					{
						// 如果最后一塊大小小于分塊大小,則重新分塊
						//
						if (bytesRead + count > length)
						{
							count = (int)(length - bytesRead);
							tempBuff = new byte[count];
						}

						// 分塊讀取
						//
						read = request.ReadEntityBody(tempBuff, count);
						
						// 復(fù)制已讀數(shù)據(jù)塊
						//
						Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, read);
						
						// 記錄已上傳大小
						//
						bytesRead += read;
						progress.SetBytesRead(bytesRead);
						SetProgress(uploadId, progress, app.Application);

					}
					if (
						request.IsClientConnected() &&
						!request.IsEntireEntityBodyIsPreloaded()
						)
					{
				
						// 傳入已上傳完的數(shù)據(jù)
						//
						InjectTextParts(request, buffer);

						// 表示上傳已結(jié)束
						//
						progress.SetBytesRead(bytesRead);
						progress.SetState(UploadState.Complete);
						SetProgress(uploadId, progress, app.Application);

					}
				}
			}
		}

		/// <summary>
		/// 結(jié)束請(qǐng)求后移除進(jìn)度信息
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void Application_EndRequest(Object sender, EventArgs e)
		{
			HttpApplication app = sender as HttpApplication;

			if (IsUploadRequest(app.Request))
			{
				SetUploadState(app, UploadState.Complete);
				RemoveFrom(app);
			}

		}	

		/// <summary>
		/// 如果出錯(cuò)了設(shè)置進(jìn)度信息中狀態(tài)為“Error”
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void Application_Error(Object sender, EventArgs e)
		{
			HttpApplication app = sender as HttpApplication;

			if (IsUploadRequest(app.Request))
			{
				SetUploadState(app, UploadState.Error);
			}

		}

		/// <summary>
		/// 設(shè)置當(dāng)前上傳進(jìn)度信息的狀態(tài)
		/// </summary>
		/// <param name="app"></param>
		/// <param name="state"></param>
		void SetUploadState(HttpApplication app, UploadState state)
		{
			string uploadId = app.Request.QueryString["UploadID"];
			if (uploadId != null && uploadId.Length > 0)
			{
				Progress progress = GetProgress(uploadId, app.Application);
				if (progress != null)
				{
					progress.SetState(state);
					SetProgress(uploadId, progress, app.Application);
				}		
			}
		}

		/// <summary>
		/// 設(shè)置當(dāng)前上傳的進(jìn)度信息
		/// 根據(jù)UploadID記錄在Application中
		/// </summary>
		/// <param name="uploadId"></param>
		/// <param name="progress"></param>
		/// <param name="application"></param>
		void SetProgress(string uploadId, Progress progress, HttpApplicationState application)
		{
			if (uploadId == null || uploadId == string.Empty || progress == null)
				return;
			application.Lock();
			application["OpenlabUpload_" + uploadId] = progress;
			application.UnLock(); 
		}

		/// <summary>
		/// 從Application中移出進(jìn)度信息
		/// </summary>
		/// <param name="app"></param>
		void RemoveFrom(HttpApplication app)
		{
			string uploadId = app.Request.QueryString["UploadID"];
			HttpApplicationState application = app.Application;
			if (uploadId != null && uploadId.Length > 0)
			{
				application.Remove("OpenlabUpload_" + uploadId);
			}
		}

		/// <summary>
		/// 根據(jù)UploadID獲取上傳進(jìn)度信息
		/// </summary>
		/// <param name="uploadId"></param>
		/// <param name="application"></param>
		/// <returns></returns>
		public static Progress GetProgress(string uploadId, HttpApplicationState application)
		{
			Progress progress = application["OpenlabUpload_" + uploadId] as Progress;
			return progress;
		}

		HttpWorkerRequest GetWorkerRequest(HttpContext context)
		{

			IServiceProvider provider = (IServiceProvider)HttpContext.Current;
			return (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
		}

		/// <summary>
		/// 傳入已上傳完的數(shù)據(jù)
		/// </summary>
		/// <param name="request"></param>
		/// <param name="textParts"></param>
		void InjectTextParts(HttpWorkerRequest request, byte[] textParts)
		{
			BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; 
			
			Type type = request.GetType(); 
			
			while ((type != null) && (type.FullName != "System.Web.Hosting.ISAPIWorkerRequest"))
			{ 
				type = type.BaseType; 
			}

			if (type != null)
			{
				type.GetField("_contentAvailLength", bindingFlags).SetValue(request, textParts.Length); 
				type.GetField("_contentTotalLength", bindingFlags).SetValue(request, textParts.Length);
				type.GetField("_preloadedContent", bindingFlags).SetValue(request, textParts); 
				type.GetField("_preloadedContentRead", bindingFlags).SetValue(request, true);
			}
		}

		private static bool StringStartsWithAnotherIgnoreCase(string s1, string s2)
		{
			return (string.Compare(s1, 0, s2, 0, s2.Length, true, CultureInfo.InvariantCulture) == 0);
		}

		/// <summary>
		/// 是否為附件上傳
		/// 判斷的根據(jù)是ContentType中有無multipart/form-data
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
		bool IsUploadRequest(HttpRequest request)
		{
			return StringStartsWithAnotherIgnoreCase(request.ContentType, "multipart/form-data");
		}
	}
}

2.Progress.cs
using System;

namespace Openlab.Web.Upload
{
	/// <summary>
	/// 上傳狀態(tài)
	/// </summary>
	public enum UploadState
	{
		/// <summary>
		/// 正在接收數(shù)據(jù)
		/// </summary>
		ReceivingData,
		/// <summary>
		/// 已完成
		/// </summary>
		Complete,
		/// <summary>
		/// 上傳錯(cuò)誤.
		/// </summary>
		Error
	}

	/// <summary>
	/// 上傳進(jìn)度信息
	/// </summary>
	public class Progress
	{
		long contentLength = 0;
		long bytesRead;
		DateTime start;
		string uploadId = "";
		UploadState state;

		public Progress(long contentLength, string uploadId)
		{
			this.contentLength = contentLength;
			start = DateTime.Now;
			this.uploadId = uploadId;
		}

		public void SetBytesRead(long bytesRead)
		{
			lock (this)
			{
				this.bytesRead = bytesRead;
			}
		}


		public void SetState(UploadState state)
		{
			lock (this)
			{
				this.state = state;
			}
		}

		/// <summary>
		/// 總大小
		/// </summary>
		public long ContentLength
		{
			get
			{
				return contentLength;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久日韩精品一区二区五区| 一区二区三区国产精华| 欧美天天综合网| 精品无人码麻豆乱码1区2区| 日韩一区有码在线| 日韩精品中文字幕一区| 欧美在线观看视频一区二区 | 成人午夜av电影| 青娱乐精品视频在线| 一个色综合av| 中文字幕佐山爱一区二区免费| 久久色成人在线| 日韩欧美一区二区视频| 欧美无乱码久久久免费午夜一区| jiyouzz国产精品久久| 国产一区二区三区高清播放| 日本一不卡视频| 洋洋成人永久网站入口| 国产精品国产自产拍高清av| 久久久久国色av免费看影院| 精品人在线二区三区| 正在播放亚洲一区| 欧美视频一区在线观看| 色又黄又爽网站www久久| 成人国产电影网| 国产91在线看| 国产成人综合亚洲91猫咪| 九九久久精品视频| 蜜桃av一区二区| 裸体在线国模精品偷拍| 日韩电影免费在线看| 日韩vs国产vs欧美| 免费精品99久久国产综合精品| 午夜精品福利在线| 午夜精品福利久久久| 日韩综合一区二区| 日韩国产一二三区| 老司机精品视频在线| 精品一区二区三区的国产在线播放| 午夜电影网亚洲视频| 日产精品久久久久久久性色| 日韩国产欧美在线播放| 日韩av高清在线观看| 美女一区二区在线观看| 蜜臀av一区二区在线免费观看| 日韩在线一二三区| 久久97超碰国产精品超碰| 极品少妇一区二区| 国产69精品久久久久777| 成人午夜免费电影| 日本久久一区二区| 欧美日韩在线播放三区四区| 欧美一区二区三区在线视频| 亚洲精品一区二区三区福利| 国产欧美日韩精品在线| 国产精品看片你懂得| 亚洲一区二区在线视频| 日韩中文字幕91| 国产精品一二三| 色综合婷婷久久| 欧美一区二区私人影院日本| 久久亚洲综合色| 国产精品不卡在线| 日韩激情视频在线观看| 国产精品系列在线观看| 一本色道久久加勒比精品| 欧美情侣在线播放| 久久久久久久久久看片| 一区二区三区在线视频免费观看| 日韩高清一区在线| 成人一级片网址| 欧美日韩日本视频| 久久久久久久久久看片| 一区二区三区免费网站| 开心九九激情九九欧美日韩精美视频电影| 国产高清亚洲一区| 精品视频免费在线| 久久久精品国产99久久精品芒果| 亚洲欧美精品午睡沙发| 久久精品国产99国产| 成人美女视频在线看| 欧美在线免费观看亚洲| 久久久久久99精品| 亚洲国产成人精品视频| 国产精品一区二区三区乱码| 欧美偷拍一区二区| 国产精品天美传媒沈樵| 日韩中文字幕一区二区三区| av福利精品导航| 日韩一级二级三级精品视频| 亚洲视频香蕉人妖| 国产麻豆精品theporn| 在线观看欧美黄色| 国产亚洲欧美日韩俺去了| 日韩电影免费一区| 色欧美88888久久久久久影院| ww亚洲ww在线观看国产| 丝袜美腿亚洲色图| 色狠狠桃花综合| 欧美激情资源网| 久久69国产一区二区蜜臀| 欧美日韩高清在线| 亚洲精品视频在线观看免费| 国产一区二区三区久久久 | 成人午夜在线播放| 欧美成人高清电影在线| 亚洲第一狼人社区| 色综合久久综合| 日本一区二区电影| 国产一区二区在线观看视频| 欧美区视频在线观看| 亚洲精品v日韩精品| 成人黄色软件下载| 久久精品水蜜桃av综合天堂| 理论片日本一区| 制服丝袜亚洲色图| 亚洲国产成人精品视频| 色成人在线视频| 亚洲女爱视频在线| 色综合色综合色综合| 1区2区3区国产精品| 不卡av电影在线播放| 欧美激情资源网| 国产精品18久久久久久久久| 久久久久久毛片| 国产精品69毛片高清亚洲| 精品国产1区2区3区| 久久国产尿小便嘘嘘| 欧美一级xxx| 蜜桃视频一区二区三区在线观看| 91精品国产全国免费观看| 天天综合日日夜夜精品| 欧美久久久久久久久久| 午夜精品成人在线视频| 欧美肥妇bbw| 日韩成人精品在线观看| 日韩视频一区二区在线观看| 麻豆成人av在线| 久久久91精品国产一区二区精品| 国产精品一品二品| 一区二区中文视频| 亚洲欧洲av一区二区三区久久| 精品日韩欧美一区二区| 天堂在线一区二区| 欧美一区二区三区系列电影| 免费久久精品视频| 久久影音资源网| 成人国产精品视频| 洋洋av久久久久久久一区| 91传媒视频在线播放| 日韩和的一区二区| 日韩精品资源二区在线| 国产成人免费av在线| 最近日韩中文字幕| 欧美日韩在线亚洲一区蜜芽| 美美哒免费高清在线观看视频一区二区 | 久久久久久久久久久久久夜| 亚洲成av人片www| 欧美挠脚心视频网站| 久久精品噜噜噜成人88aⅴ| 久久女同精品一区二区| 99re8在线精品视频免费播放| 夜夜嗨av一区二区三区四季av| 欧美一级免费观看| 国产精品亚洲一区二区三区在线| 亚洲视频一区二区免费在线观看 | 欧美亚洲精品一区| 免费高清在线一区| 国产精品久久久久婷婷 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 色香蕉久久蜜桃| 美女网站色91| 一区二区中文视频| 日韩欧美一区二区三区在线| www..com久久爱| 日韩成人av影视| 综合婷婷亚洲小说| 日韩免费高清电影| 99国产精品久久久久久久久久久| 日韩电影免费在线| 亚洲欧洲av在线| 日韩三区在线观看| 91丨九色丨国产丨porny| 免费不卡在线观看| 亚洲精品久久久蜜桃| 久久婷婷成人综合色| 欧美亚洲一区三区| 风间由美中文字幕在线看视频国产欧美| 亚洲国产日韩在线一区模特| 国产亚洲欧美日韩在线一区| 9191成人精品久久| 91在线观看美女| 极品少妇xxxx精品少妇| 亚洲国产精品一区二区www在线| 国产三区在线成人av| 欧美一区二区三区公司| 色久综合一二码| 成人午夜激情影院| 韩日欧美一区二区三区| 亚洲第一狼人社区|