HTTP斷點續傳下載的原理


frombegintoend原文HTTP斷點續傳下載的原理

要實現斷點續傳下載文件,首先要了解斷點續傳的原理。斷點續傳其實就是在上一次下載斷開的位置開始繼續下載,HTTP協議中,可以在請求報文頭中加入Range段,來表示客戶機希望從何處繼續下載。

這是一個普通的下載請求:

GET /test.txt HTTP/1.1  
Accept:*/*  
Referer:http://192.168.1.96  
Accept-Language:zh-cn  
Accept-Encoding:gzip,deflate  
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)  
Host:192.168.1.96  
Connection:Keep-Alive  

 這表示從1024字節開始斷點續傳(加入了Range:bytes=1024-):

GET /test.txt HTTP/1.1  
Accept:*/*  
Referer:http://192.168.1.96  
Accept-Language:zh-cn  
Accept-Encoding:gzip,deflate  
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)  
Host:192.168.1.96  
Range:bytes=1024-  
Connection:Keep-Alive  

 C#主要代碼:

#region 以斷點續傳方式下載文件  
  
/// <summary>  
/// 以斷點續傳方式下載文件  
/// </summary>  
/// <param name="strFileName">下載文件的保存路徑</param>  
/// <param name="strUrl">文件下載地址</param>  
public void DownloadFile(string strFileName, string strUrl)  
{  
    //打開上次下載的文件或新建文件  
    long SPosition = 0;  
    FileStream FStream;  
    if (File.Exists(strFileName))  
    {  
        FStream = File.OpenWrite(strFileName);  
        SPosition = FStream.Length;  
        FStream.Seek(SPosition, SeekOrigin.Current);//移動文件流中的當前指針  
    }  
    else  
    {  
        FStream = new FileStream(strFileName, FileMode.Create);  
        SPosition = 0;  
    }  
    try  
    {  
        HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl);  
        if (SPosition > 0)  
            myRequest.AddRange((int)SPosition);//設置Range值  
        //向服務器請求,獲得服務器的回應數據流  
        Stream myStream = myRequest.GetResponse().GetResponseStream();  
        byte[] btContent = new byte[512];  
        int intSize = 0;  
        intSize = myStream.Read(btContent, 0, 512);  
        while (intSize > 0)  
        {  
            FStream.Write(btContent, 0, intSize);  
            intSize = myStream.Read(btContent, 0, 512);  
        }  
        FStream.Close();  
        myStream.Close();  
        //文件下載完成  
    }  
    catch  
    {  
        FStream.Close();  
    }  
}  
 
#endregion  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM