| /200905/yuanma/SlickUpload.rar /200905/yuanma/Krystalware.SlickUpload.rar
 
 复制代码 代码如下: 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;
 using System.Text;
 using System.Reflection;
 namespace Krystalware.SlickUpload
 {
 /**
 * [[服务器端WebConfig.XML设置]]
 *
 * 需要在WebConfig.XML中进配置,以下结于
 *<configuration>
 <appSettings>
 <add key="HttpUploadModulePageGoOn" value="*.*;"/>
 <add key="HttpUploadModulePageJump" value="x.aspx;"/>
 </appSettings>
 *<system.web>
 <httpModules>
 <add type="SlickUpload.HttpUploadModule, SlickUpload" />
 </httpModules>
 <httpRuntime maxRequestLength="1000000" />
 *</system.web>
 *</configuration>
 *
 [说明]
 1、如果满足<HttpUploadModulePageJump>所设置的页面,则不使用大文件上传功能,直接跳出
 /// 当没有设置[HttpUploadModulePageJump]则返回false;
 /// 当设置[HttpUploadModulePageJump]中有[*.*;]时则返回true
 /// 当设置[HttpUploadModulePageJump]中的页面等同与所要处理页面的后缀时,则返回true,否则返回false
 2、如果不满足<HttpUploadModulePageJump>所设置的页面则继续进行下一判断.
 3、如果满足<HttpUploadModulePageGoOn>所设置的页面,则使用大文件上传功能;否则跳出
 /// 当没有设置[HttpUploadModulePageGoOn]则返回false;
 /// 当设置[HttpUploadModulePageGoOn]中有[*.*;]时则返回true
 /// 当设置[HttpUploadModulePageGoOn]中的页面等同与所要处理页面的后缀时,则返回true,否则返回false
 *
 *
 **/
 public sealed class HttpUploadModule : IHttpModule
 {
 public HttpUploadModule()
 {
 }
 private void CleanupFiles(HttpContext context)
 {
 MimeUploadHandler handler1 = this.GetUploadHandler(context);
 if (handler1 != null)
 {
 foreach (UploadedFile file1 in handler1.UploadedFiles)
 {
 File.Delete(file1.ServerPath);
 }
 handler1.UploadedFiles.Clear();
 }
 }
 private void ClearUploadStatus()
 {
 HttpUploadModule.RemoveFrom(HttpContext.Current.Application, HttpUploadModule.GetUploadStatus().UploadId);
 }
 private void context_BeginRequest(object sender, EventArgs e)
 {
 HttpApplication application1 = sender as HttpApplication;
 //begin: jiang zhi 2005.10.15+
 //如果满足<HttpUploadModulePageJump>所设置的页面,则不使用大文件上传功能,直接跳出
 if (IsJump(application1)) return;
 //如果满足<HttpUploadModulePageGoOn>所设置的页面,则使用大文件上传功能;
 //如果不满足<HttpUploadModulePageGoOn>所设置的页面,则不使用大文件上传功能;直接跳出
 if (!IsGoOn(application1)) return;
 //end
 if (this.IsUploadRequest(application1.Request))
 {
 HttpWorkerRequest request1 = this.GetWorkerRequest(application1.Context);
 Encoding encoding1 = application1.Context.Request.ContentEncoding;
 if (request1 != null)
 {
 byte[] buffer1 = this.ExtractBoundary(application1.Request.ContentType, encoding1);
 string text1 = application1.Request.QueryString["uploadId"];
 MimeUploadHandler handler1 = new MimeUploadHandler(new RequestStream(request1), buffer1, text1, encoding1);
 if (text1 != null)
 {
 this.RegisterIn(application1.Context, handler1);
 }
 try
 {
 this.SetUploadState(application1.Context, UploadState.ReceivingData);
 handler1.Parse();
 this.InjectTextParts(request1, encoding1.GetBytes(handler1.TextParts));
 }
 catch (DisconnectedException)
 {
 this.CleanupFiles(application1.Context);
 }
 }
 }
 }
 /// <summary>
 /// 当没有设置[HttpUploadModulePageJump]则返回false;
 /// 当设置[HttpUploadModulePageJump]中有[*.*;]时则返回true
 /// 当设置[HttpUploadModulePageJump]中的页面等同与所要处理页面的后缀时,则返回true,否则返回false
 /// </summary>
 /// <param></param>
 /// <returns></returns>
 private bool IsJump(HttpApplication application1)
 {
 bool result = false;
 if (application1.Application["HttpUploadModulePageJump"] != null)
 {
 string[] al = ((string)application1.Application["HttpUploadModulePageJump"]).Split(';');
 if (al != null )
 {
 for(int i = 0; i < al.Length; i++)
 {
 string temp= al[i];//"OfficeServer.aspx";
 if (temp =="*.*")
 {
 result = true;
 break;
 }
 if (application1.Request.Path.EndsWith(temp))
 {
 result = true;
 break;
 }
 }
 }
 }
 return result;
 }
 /// <summary>
 /// 当没有设置[HttpUploadModulePageGoOn]则返回false;
 /// 当设置[HttpUploadModulePageGoOn]中有[*.*;]时则返回true
 /// 当设置[HttpUploadModulePageGoOn]中的页面等同与所要处理页面的后缀时,则返回true,否则返回false
 /// </summary>
 /// <param></param>
 /// <returns></returns>
 private bool IsGoOn(HttpApplication application1)
 {
 bool result = false;
 if (application1.Application["HttpUploadModulePageGoOn"] != null)
 {
 string[] al = ((string)application1.Application["HttpUploadModulePageGoOn"]).Split(';');
 if (al != null)
 {
 for(int i = 0; i < al.Length; i++)
 {
 string temp= al[i];//"OfficeServer.aspx";
 if (temp =="*.*")
 {
 result = true;
 break;
 }
 if (application1.Request.Path.EndsWith(temp))
 {
 result = true;
 break;
 }
 }
 }
 }
 return result;
 }
 private void context_EndRequest(object sender, EventArgs e)
 {
 HttpApplication application1 = sender as HttpApplication;
 //begin: 2005.10.15+
 //如果满足<HttpUploadModulePageJump>所设置的页面,则不使用大文件上传功能,直接跳出
 if (IsJump(application1)) return;
 //如果满足<HttpUploadModulePageGoOn>所设置的页面,则使用大文件上传功能;
 //如果不满足<HttpUploadModulePageGoOn>所设置的页面,则不使用大文件上传功能;直接跳出
 if (!IsGoOn(application1)) return;
 //end
 if (this.IsUploadRequest(application1.Request))
 {
 this.SetUploadState(application1.Context, UploadState.Complete);
 this.CleanupFiles(application1.Context);
 }
 string text1 = (string) application1.Context.Items["__removeUploadStatus"];
 if ((text1 != null) && (text1.Length > 0))
 {
 HttpUploadModule.RemoveFrom(application1.Application, text1);
 }
 }
 private void context_Error(object sender, EventArgs e)
 {
 HttpApplication application1 = sender as HttpApplication;
 //begin: 2005.10.15+
 //如果满足<HttpUploadModulePageJump>所设置的页面,则不使用大文件上传功能,直接跳出
 if (IsJump(application1)) return;
 //如果满足<HttpUploadModulePageGoOn>所设置的页面,则使用大文件上传功能;
 //如果不满足<HttpUploadModulePageGoOn>所设置的页面,则不使用大文件上传功能;直接跳出
 if (!IsGoOn(application1)) return;
 //end
 if (this.IsUploadRequest(application1.Request))
 {
 this.SetUploadState(application1.Context, UploadState.Error);
 this.CleanupFiles(application1.Context);
 }
 }
 private byte[] ExtractBoundary(string contentType, Encoding encoding)
 {
 int num1 = contentType.IndexOf("boundary=");
 if (num1 > 0)
 {
 return encoding.GetBytes("--" + contentType.Substring(num1 + 9));
 }
 return null;
 }
 public static UploadedFileCollection GetUploadedFiles()
 {
 return HttpUploadModule.GetUploadedFiles(HttpContext.Current);
 }
 public static UploadedFileCollection GetUploadedFiles(HttpContext context)
 {
 MimeUploadHandler handler1 = (MimeUploadHandler) context.Items["_uploadHandler"];
 if (handler1 != null)
 {
 return UploadedFileCollection.ReadOnly(handler1.UploadedFiles);
 }
 return null;
 }
 private MimeUploadHandler GetUploadHandler(HttpContext context)
 {
 return (MimeUploadHandler) context.Items["_uploadHandler"];
 }
 public static UploadStatus GetUploadStatus()
 {
 return HttpUploadModule.GetUploadStatus(HttpContext.Current);
 }
 public static UploadStatus GetUploadStatus(HttpApplicationState application, string uploadId)
 {
 return (UploadStatus) application["_UploadStatus_" + uploadId];
 }
 public static UploadStatus GetUploadStatus(HttpContext context)
 {
 return HttpUploadModule.GetUploadStatus(context.Request.QueryString["uploadId"]);
 }
 public static UploadStatus GetUploadStatus(string uploadId)
 {
 HttpContext context1 = HttpContext.Current;
 UploadStatus status1 = HttpUploadModule.GetUploadStatus(context1.Application, uploadId);
 if (((status1 != null) && (status1.State != UploadState.ReceivingData)) && status1.AutoDropState)
 {
 context1.Items["__removeUploadStatus"] = uploadId;
 }
 return status1;
 }
 private HttpWorkerRequest GetWorkerRequest(HttpContext context)
 {
 return (HttpWorkerRequest) ((IServiceProvider) HttpContext.Current).GetService(typeof(HttpWorkerRequest));
 }
 private void InjectTextParts(HttpWorkerRequest request, byte[] textParts)
 {
 BindingFlags flags1 = BindingFlags.NonPublic | BindingFlags.Instance;
 Type type1 = request.GetType();
 while ((type1 != null) && (type1.FullName != "System.Web.Hosting.ISAPIWorkerRequest"))
 {
 type1 = type1.BaseType;
 }
 if (type1 != null)
 {
 type1.GetField("_contentAvailLength", flags1).SetValue(request, textParts.Length);
 type1.GetField("_contentTotalLength", flags1).SetValue(request, textParts.Length);
 type1.GetField("_preloadedContent", flags1).SetValue(request, textParts);
 type1.GetField("_preloadedContentRead", flags1).SetValue(request, true);
 }
 }
 private bool IsUploadRequest(HttpRequest request)
 {
 return request.ContentType.ToLower().StartsWith("multipart/form-data");
 }
 private void RegisterIn(HttpContext context, MimeUploadHandler handler)
 {
 context.Items["_uploadHandler"] = handler;
 context.Application["_UploadStatus_" + handler.UploadStatus.UploadId] = handler.UploadStatus;
 }
 public static void RemoveFrom(HttpApplicationState application, string uploadId)
 {
 application.Remove("_UploadStatus_" + uploadId);
 }
 public static void RemoveFrom(string uploadId)
 {
 HttpUploadModule.RemoveFrom(HttpContext.Current.Application, uploadId);
 }
 private void SetUploadState(HttpContext context, UploadState state)
 {
 MimeUploadHandler handler1 = this.GetUploadHandler(context);
 if (handler1 != null)
 {
 handler1.UploadStatus.SetState(state);
 }
 }
 void IHttpModule.Dispose()
 {
 }
 void IHttpModule.Init(HttpApplication context)
 {
 context.BeginRequest += new EventHandler(this.context_BeginRequest);
 context.Error += new EventHandler(this.context_Error);
 context.EndRequest += new EventHandler(this.context_EndRequest);
 }
 }
 }
 
 (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |