360SDN.COM

首页/HTTPS/列表

HTTP断点续传下载的原理

来源:  2018-07-04 15:55:59    评论:0点击:

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

 
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权