<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:45:29
        文檔

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

        asp.net 上傳大文件解決方案:這次在項目中,用到了大文件上傳,要上傳的文件有100多m,于是研究現在國內使用的大文件上傳的組件發現用的比較多的有兩個控件AspnetUpload 2.0和Lion.Web.UpLoadModule,另外還有思歸在它的博客堂中所說的辦法 http://blog.joycode.co
        推薦度:
        導讀asp.net 上傳大文件解決方案:這次在項目中,用到了大文件上傳,要上傳的文件有100多m,于是研究現在國內使用的大文件上傳的組件發現用的比較多的有兩個控件AspnetUpload 2.0和Lion.Web.UpLoadModule,另外還有思歸在它的博客堂中所說的辦法 http://blog.joycode.co

        這次在項目中,用到了大文件上傳,要上傳的文件有100多m,于是研究現在國內使用的大文件上傳的
        組件發現用的比較多的有兩個控件AspnetUpload 2.0和Lion.Web.UpLoadModule,另外還有思歸在它的博客
        堂中所說的辦法 http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspx
           兩個控件的方法是:利用隱含的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也能上傳大文件,在以下地址下載
          http://krystalware.com/files/slickupload.zip
          不過覺得的思歸的方法容易很多

        相關文章:
        讓asp.net默認的上傳組件支持進度條反映 
        http://blog.joycode.com/dotey/archive/2005/06/12/53557.aspx // 寶玉
        http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspx // 思歸
        http://www.cnblogs.com/bestcomy/archive/2004/06/09/14267.aspx // bestcomy
        http://krystalware.com/wiki/default.aspx/KrystalWiki.UploadSpike1
        http://www.blueidea.com/tech/program/2005/2997.asp //ftp
        通過Web Services上傳和下載文件
        http://dotnet.aspx.cc/ShowDetail.aspx?id=6381BD5F-51F3-4339-4239-1328564A1B2A
        上傳組件是如何不受settimeout限制的?
        http://www.ietf.org/rfc/rfc1867.txt?number=1867

        下載
        http://support.microsoft.com/default.aspx?scid=kb;en-us;812406&Product=aspnet 

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        asp.net 上傳大文件解決方案:這次在項目中,用到了大文件上傳,要上傳的文件有100多m,于是研究現在國內使用的大文件上傳的組件發現用的比較多的有兩個控件AspnetUpload 2.0和Lion.Web.UpLoadModule,另外還有思歸在它的博客堂中所說的辦法 http://blog.joycode.co
        推薦度:
        標簽: 文件 上傳 文件夾
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲七久久之综合七久久| 亚洲成a人片在线不卡一二三区 | 最近免费中文在线视频| 国产亚洲精品无码成人| 亚洲综合视频在线观看| 在线日本高清免费不卡| 久久久久久久久久免免费精品| 国产精品美女自在线观看免费| 午夜亚洲WWW湿好爽| 免费一级一片一毛片| 牛牛在线精品观看免费正| 无码国产精品一区二区免费16| 亚洲av无码一区二区三区网站 | 免费少妇a级毛片| 深夜久久AAAAA级毛片免费看| 亚洲国产成人精品91久久久| 成在线人直播免费视频| 久久久亚洲精品国产| h在线观看视频免费网站| 亚洲伊人久久大香线蕉AV| 日本在线免费播放| 中文字幕亚洲综合久久| 中国一级特黄的片子免费 | 亚洲自偷自拍另类12p| 精品国产免费人成电影在线观看 | 白白国产永久免费视频| 美女免费精品高清毛片在线视| 国产免费女女脚奴视频网| 亚洲精品无码久久| 国产a v无码专区亚洲av| 日本在线免费观看| 亚洲精品无码久久久久YW| 亚洲色婷婷综合久久| 色播精品免费小视频| 精品亚洲福利一区二区| 亚洲国产精品无码久久久秋霞2 | 免费人成激情视频| 日本免费高清视频| 色吊丝免费观看网站| 久久青青草原亚洲av无码app| 国产一级淫片a免费播放口之|