LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#實(shí)現(xiàn)http協(xié)議下載的斷點(diǎn)續(xù)傳

admin
2024年3月12日 23:40 本文熱度 659

我們寄希望于萬能的解決方案,但是現(xiàn)實(shí)的情況總是很糟糕。在軟件編程的世界中,技術(shù)分散的情況尤為嚴(yán)重,且不說各種語言擁有的優(yōu)勢(shì)不能融合,單就一門語言而言,就擁有眾多的技術(shù)和相關(guān)技術(shù)需要學(xué)習(xí)。網(wǎng)絡(luò)編程就是這種情況,tcp、udp、http和soap相關(guān)的協(xié)議,我們不得不在同一個(gè)應(yīng)用中使用不同難以整合的技術(shù)。tcp講究精準(zhǔn),udp講究性能,http對(duì)于穿越外網(wǎng)有這天然的優(yōu)勢(shì),soap對(duì)于講究編程模型的人來說是福音。

其實(shí)斷點(diǎn)續(xù)傳,眾多技術(shù)都可以實(shí)現(xiàn),只是難易程度而以。經(jīng)過比較分析發(fā)現(xiàn),http對(duì)于斷點(diǎn)下載比較容易實(shí)現(xiàn),它最成功的地方在于,不需要服務(wù)端的實(shí)現(xiàn),只需將需要下載的文件放置在iis服務(wù)器中即可。

下面我會(huì)根據(jù)下面一段代碼分析http協(xié)議的。

        /// <summary>
        /// 下載方法
        /// </summary>
        /// <param name="uri">下載地址的URI</param>
        public void DownLoad(object obj)
        {

            //比如uri=http://localhost/Rabom/1.rar;iis就需要自己配置了。
            string uri = obj.ToString();
            //截取文件名
            string fileName = uri.Substring(uri.LastIndexOf(@"/") + 1);

            //構(gòu)造文件完全限定名,準(zhǔn)備將網(wǎng)絡(luò)流下載為本地文件
            string fileFullName = Application.StartupPath + @"\download\" + fileName;
            //構(gòu)造文件的配置文件的完全完全限定名
            string fileCfgName = Application.StartupPath + @"\download\" + fileName+".cfg";


            //本地構(gòu)造文件流
            FileStream fs;
            //本地配置文件流
            FileStream fsCfg;

            if (File.Exists(fileFullName))
            {
                //如果存在配置文件,則繼續(xù)下載
                if (File.Exists(fileCfgName))
                {
                    fs = new FileStream(fileFullName, FileMode.Append, FileAccess.Write, FileShare.Write);
                    fsCfg = fs = new FileStream(fileFullName, FileMode.Append, FileAccess.Write, FileShare.Write);
                }
                else
                {
                    return;//暫且這樣
                }
            }
            else
            {
                fs = new FileStream(fileFullName, FileMode.Create);
                fsCfg = new FileStream(fileCfgName, FileMode.Create);
            }

            //開辟內(nèi)存空間
            byte[] buffer = new byte[512];

            //請(qǐng)求地址
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
            //請(qǐng)求開始位置
            request.AddRange((int)fs.Length);

            //獲取網(wǎng)絡(luò)流
            Stream ns = request.GetResponse().GetResponseStream();

            //獲取文件實(shí)際長(zhǎng)度
            long contentLength = request.GetResponse().ContentLength;
            //獲取文件讀取到的長(zhǎng)度
            int length = ns.Read(buffer, 0, buffer.Length);

            while (length > 0)
            {   

                //將字節(jié)數(shù)組寫入流
                fs.Write(buffer, 0, buffer.Length);

                //繼續(xù)下載
                buffer = new byte[512];
                length = ns.Read(buffer, 0, buffer.Length);
            }

            ns.Close();
            fs.Close();
            fsCfg.Close();

     }

在上面的代碼中,比較重要的就是類HttpWebRequest,這個(gè)類封裝了http協(xié)議訪問網(wǎng)絡(luò)資源的方法,與WebClient不同的是,HttpWebRequest允許我們使用網(wǎng)絡(luò)流的方式進(jìn)行下載,我們通過URI創(chuàng)建一個(gè)網(wǎng)絡(luò)流,我們就可以開始獲取我們需要的數(shù)據(jù)了。在http協(xié)議的報(bào)文中,會(huì)進(jìn)行詳細(xì)的描述,當(dāng)然描述的內(nèi)容很多,HttpWebRequest都幫我們做了,說點(diǎn)題外話,http協(xié)議會(huì)將我們計(jì)算機(jī)環(huán)境寫進(jìn)報(bào)文,其中包括計(jì)算機(jī)名,計(jì)算機(jī)所在的ip地址。當(dāng)然也包括我們所講的斷點(diǎn)下載的關(guān)鍵報(bào)文Range,這個(gè)報(bào)文就是我們需要開始下載文件的起始位置,這樣我們就可以根據(jù)本地文件已經(jīng)下載了多少,為斷點(diǎn)下載時(shí)所要求的起始位置提供依據(jù)。

本地文件剛創(chuàng)建的時(shí)候,fs.Lenght為0所以我們?cè)趇is服務(wù)器上請(qǐng)求的網(wǎng)絡(luò)流的游標(biāo)是在流的起始位置,當(dāng)我們停止下載后,再度下載該資源的時(shí)候,網(wǎng)絡(luò)流的游標(biāo)位置會(huì)根據(jù)range的值設(shè)置到相應(yīng)的位置,這樣我們就可以斷點(diǎn)下載了。


該文章在 2024/3/13 0:24:25 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲欧美另类在线一区二区三区 | 视频二区一区国产精品天天 | 日日狠狠久久偷偷色综合老牛 | 亚洲国产一区二区三区在线 | 婷婷色香五月综合缴缴情香蕉 | 日韩色老头中文字幕 |