ASP.NET 應用中大文件上傳研究
2006/12/25 23:44:10
在項目中經常要用到了大文件上傳,要上傳的文件有100多m,于是研究現在國內使用的大文件上傳的組件發現用的比較多的有兩個控件AspnetUpload 2.0和Lion.Web.UpLoadModule,兩個控件的方法是:利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數據。Chris Hynes為我們提供了這樣的一個方案(用HttpModule),該方案除了允許你上傳大文件外,還能實時顯示上傳進度。

  Lion.Web.UpLoadModule和AspnetUpload 兩個.NET組件都是利用的這個方案。

  當上傳單文件時,兩個軟件的方法是一樣的,繼承HttpModule

    HttpApplication application1 = sender as HttpApplication;
HttpWorkerRequest request1 = (HttpWorkerRequest) ((IServiceProvider) HttpContext.Current).GetService(typeof(HttpWorkerRequest));
try
{
 if (application1.Context.Request.ContentType.IndexOf("multipart/form-data") <= -1)
 {
  return;
 }
 //Check The HasEntityBody
 if (!request1.HasEntityBody())
 {
  return;
 }
 int num1 = 0;
 TimeSpan span1 = DateTime.Now.Subtract(this.beginTime);

 string text1 = application1.Context.Request.ContentType.ToLower();

 byte[] buffer1 = Encoding.ASCII.GetBytes(("\r\n--" + text1.Substring(text1.IndexOf("boundary=") + 9)).ToCharArray());
 int num2 = Convert.ToInt32(request1.GetKnownRequestHeader(11));
 Progress progress1 = new Progress();

 application1.Context.Items.Add("FileList", new Hashtable());

 byte[] buffer2 = request1.GetPreloadedEntityBody();
 num1 += buffer2.Length;

 string text2 = this.AnalysePreloadedEntityBody(buffer2, "UploadGUID");
 if (text2 != string.Empty)
 {
  application1.Context.Items.Add("LionSky_UpLoadModule_UploadGUID", text2);
 }
 bool flag1 = true;
 if ((num2 > this.UpLoadFileLength()) && ((0 > span1.TotalHours) || (span1.TotalHours > 3)))
 {
  flag1 = false;
 }
 if ((0 > span1.TotalHours) || (span1.TotalHours > 3))
 {
  flag1 = false;
 }
 string text3 = this.AnalysePreloadedEntityBody(buffer2, "UploadFolder");
 ArrayList list1 = new ArrayList();
 RequestStream stream1 = new RequestStream(buffer2, buffer1, null, RequestStream.FileStatus.Close, RequestStream.ReadStatus.NoRead, text3, flag1, application1.Context, string.Empty);
 list1.AddRange(stream1.ReadBody);
 if (text2 != string.Empty)
 {
  progress1.FileLength = num2;
  progress1.ReceivedLength = num1;
  progress1.FileName = stream1.OriginalFileName;
  progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
  application1.Application["_UploadGUID_" + text2] = progress1;
 }
 if (!request1.IsEntireEntityBodyIsPreloaded())
 {
  byte[] buffer4;
  ArrayList list2;
  int num3 = 204800;
  byte[] buffer3 = new byte[num3];
  while ((num2 - num1) >= num3)
  {
   if (!application1.Context.Response.IsClientConnected)
   {
    this.ClearApplication(application1);
   }
   num3 = request1.ReadEntityBody(buffer3, buffer3.Length);
   num1 += num3;
   list2 = stream1.ContentBody;
   if (list2.Count > 0)
   {
    buffer4

下一頁
返回列表
返回首頁 主站蜘蛛池模板: www.精品国产| 亚洲日本久久一区二区va| 麻豆国产高清精品国在线| 国自产精品手机在线观看视频 | 最新亚洲精品国自产在线观看| 国产乱理伦片在线观看| 18禁男女无遮挡啪啪网站| 天天色天天射综合网| 中文字幕亚洲精品| 日本韩国三级在线| 亚洲一区中文字幕| 欧美肥臀bbwbbwbbw| 免费国产黄网站在线观看视频| 成年人免费的视频| 国产网红在线观看| blacked欧美一区二区| 性欧美成人免费观看视| 久久99精品国产一区二区三区| 欧美牲交a欧美牲交aⅴ免费下载| 国产一区二区三区在线电影| 国产h在线播放| 国产精品成年片在线观看| 99爱免费视频| 女同恋のレズビアンbd在线| 两个人看的www视频日本| 日本三级做a全过程在线观看| 亚洲成A人片在线观看无码| 男女之间差差差| 内射毛片内射国产夫妻| 一本一本久久aa综合精品| 无码人妻精品一区二| 久久国产劲暴∨内射新川| 最新更新国内自拍视频| 亚洲人成伊人成综合网久久久 | 16668开场直播| 在线播放第一页| A国产一区二区免费入口| 女人与zozozo禽交| www320999com| 女人扒开双腿让男人桶| 一个人看的片免费高清大全|