亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net 上傳大文件解決方案

2024-07-10 13:22:42
字體:
來源:轉載
供稿:網友

這次在項目中,用到了大文件上傳,要上傳的文件有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 = new byte[list2.Count + buffer3.Length];
       list2.CopyTo(buffer4, 0);
       buffer3.CopyTo(buffer4, list2.Count);
       stream1 = new RequestStream(buffer4, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
      }
      else
      {
       stream1 = new RequestStream(buffer3, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
      }
      list1.AddRange(stream1.ReadBody);
      if (text2 != string.Empty)
      {
       progress1.ReceivedLength = num1;
       progress1.FileName = stream1.OriginalFileName;
       progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
       application1.Application["_UploadGUID_" + text2] = progress1;
      }
     }
     buffer3 = new byte[num2 - num1];
     if (!application1.Context.Response.IsClientConnected && (stream1.FStatus == RequestStream.FileStatus.Open))
     {
      this.ClearApplication(application1);
     }
     num3 = request1.ReadEntityBody(buffer3, buffer3.Length);
     list2 = stream1.ContentBody;
     if (list2.Count > 0)
     {
      buffer4 = new byte[list2.Count + buffer3.Length];
      list2.CopyTo(buffer4, 0);
      buffer3.CopyTo(buffer4, list2.Count);
      stream1 = new RequestStream(buffer4, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
     }
     else
     {
      stream1 = new RequestStream(buffer3, buffer1, stream1.FileStream, stream1.FStatus, stream1.RStatus, text3, flag1, application1.Context, stream1.OriginalFileName);
     }
     list1.AddRange(stream1.ReadBody);
     if (text2 != string.Empty)
     {
      progress1.ReceivedLength = num1 + buffer3.Length;
      progress1.FileName = stream1.OriginalFileName;
      progress1.FileCount = ((Hashtable) application1.Context.Items["FileList"]).Count;
      if (flag1)
      {
       progress1.UploadStatus = Progress.UploadStatusEnum.Uploaded;
      }
      else
      {
       application1.Application.Remove("_UploadGUID_" + text2);
      }
     }
    }
    byte[] buffer5 = new byte[list1.Count];
    list1.CopyTo(buffer5);
    this.PopulateRequestData(request1, buffer5);
   }
   catch (Exception exception1)
   {
    this.ClearApplication(application1);
    throw exception1;
   }


  而思歸所說的方法使用Mime也能上傳大文件,在以下地址下載
  
  不過覺得的思歸的方法容易很多

相關文章:
讓asp.net默認的上傳組件支持進度條反映 
 // 寶玉
 // 思歸
 // bestcomy

 //ftp
通過Web Services上傳和下載文件
?id=6381BD5F-51F3-4339-4239-1328564A1B2A
上傳組件是如何不受settimeout限制的?
?number=1867

下載
?scid=kb;en-us;812406&Product=aspnet 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清在线观看| 国产成人精彩在线视频九色| 精品中文字幕久久久久久| 午夜免费在线观看精品视频| 日韩中文字幕网站| 日韩精品在线第一页| 亚洲精品日韩丝袜精品| 日韩av中文在线| 亚洲精品在线视频| 欧美激情欧美激情| 国产精品中文字幕在线观看| 亚洲人成在线观看网站高清| 亚洲级视频在线观看免费1级| 91免费人成网站在线观看18| 精品呦交小u女在线| 精品中文字幕在线2019| 亚洲嫩模很污视频| 欧美专区在线观看| 亚洲精品福利在线| 在线播放亚洲激情| 亚洲成人激情小说| 日韩性xxxx爱| 日韩黄色高清视频| 欧美在线播放视频| 日本乱人伦a精品| 亚洲自拍中文字幕| 久久这里只有精品视频首页| 中文在线资源观看视频网站免费不卡| 精品无人区太爽高潮在线播放| 国产日韩一区在线| 国产精品尤物福利片在线观看| 中文字幕欧美亚洲| 欧美日在线观看| 日韩精品免费在线视频| 国产91成人video| 亚洲精品久久久久中文字幕二区| 日韩欧美有码在线| 久久福利视频导航| 欧美自拍大量在线观看| 日韩中文在线中文网三级| 日韩二区三区在线| 国产免费一区视频观看免费| 国产精品视频在线观看| 亚洲偷欧美偷国内偷| 91免费在线视频| 日韩欧美在线字幕| 亚洲成人网久久久| 久久精品人人做人人爽| 日韩有码片在线观看| 欧美日韩国产123| 国产亚洲成av人片在线观看桃| 亚洲国产精品人久久电影| 亚洲精品中文字幕有码专区| 亚洲一区二区三区sesese| 欧美高清videos高潮hd| 久久久国产精品亚洲一区| 欧洲成人在线视频| 国产亚洲成精品久久| 精品视频久久久久久久| 国产精品视频资源| 日本免费在线精品| 日韩av三级在线观看| 精品久久久久国产| 日韩中文在线中文网三级| 亚洲精品少妇网址| 精品夜色国产国偷在线| 中文字幕国产亚洲| 欧美日韩免费一区| 国产成人综合久久| 久久久亚洲影院你懂的| 午夜剧场成人观在线视频免费观看| 久久久久久999| 国产一区二区日韩精品欧美精品| 亚洲综合精品一区二区| 日韩精品免费综合视频在线播放| 欧美专区中文字幕| 国产精品视频免费在线| 91久久嫩草影院一区二区| 亚洲91av视频| 国产精品高潮在线| 国内伊人久久久久久网站视频| 亚洲色图综合久久| 性金发美女69hd大尺寸| 日韩一区av在线| 美日韩精品视频免费看| 91超碰caoporn97人人| 91精品国产91久久久久久吃药| 91av免费观看91av精品在线| 欧美精品videossex性护士| 中文精品99久久国产香蕉| 欧美精品生活片| 国产精品久久久久7777婷婷| 精品性高朝久久久久久久| 欧美做受高潮电影o| 91av福利视频| 精品二区三区线观看| 国产一区二区三区丝袜| 欧美精品18videosex性欧美| 91精品在线影院| 欧美激情中文字幕乱码免费| 亚洲xxx大片| 国产精品对白刺激| 韩国视频理论视频久久| 国产日韩欧美中文| 欧美在线xxx| 大伊人狠狠躁夜夜躁av一区| 理论片在线不卡免费观看| 日韩美女主播视频| 一区二区欧美激情| 欧美韩日一区二区| 91最新在线免费观看| 国内精品一区二区三区| 国产在线日韩在线| 中文字幕亚洲情99在线| 欧美性生活大片免费观看网址| 九九精品在线视频| 国产97色在线|日韩| 久久这里只有精品视频首页| 欧美黑人国产人伦爽爽爽| 国产精品三级美女白浆呻吟| 亚洲精品免费网站| 97精品国产91久久久久久| www日韩中文字幕在线看| 国产区亚洲区欧美区| 国产一区二区三区精品久久久| 亚洲色图美腿丝袜| 1769国产精品| 成人观看高清在线观看免费| 国产成人久久久精品一区| 精品电影在线观看| 亚洲伊人久久大香线蕉av| 97超碰蝌蚪网人人做人人爽| 亚洲网站在线观看| 成人日韩在线电影| 91高清视频免费观看| 欧美日韩一区二区三区在线免费观看| 亚洲精品成人网| 亚洲天堂网在线观看| 国产精品精品久久久| 国产精品h在线观看| 国产精品扒开腿做| 国产精品综合不卡av| 亚洲综合中文字幕68页| 日韩欧美一区二区三区| 精品国内自产拍在线观看| 欧美性jizz18性欧美| 国产男女猛烈无遮挡91| 国产精品国产三级国产aⅴ9色| 精品久久久国产| 国产精品爽爽ⅴa在线观看| 亚洲国产欧美一区二区丝袜黑人| 欧美精品一区二区免费| 欧美成人免费va影院高清| 欧美另类交人妖| 亚洲精品电影在线观看| 亚洲亚裔videos黑人hd| 美日韩精品免费观看视频| 97国产精品免费视频| 欧美激情视频网| 国产成人精品a视频一区www| 亚洲欧美日韩天堂一区二区| 国产日韩综合一区二区性色av| 亚洲欧美另类自拍| 亚洲免费伊人电影在线观看av|