zoukankan      html  css  js  c++  java
  • HTTP协议断点续传

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    
    namespace HttpDemo
    {
        class Program
        {
            //需要下载的路径
            static string url = "http://www.aseoe.com/demo/api/jquery_aseoe_001.zip";
            //获取文件全称
            static string fileName = Path.GetFileName(url);
            //保存路径
            static string localPath = "D:\HttpCeShi\" + fileName;
            //未下载完后面加.temp后缀名
            static string tempPath = localPath + ".temp";
            //偏移量(断点)
            static int pos;
    
            static void Main(string[] args)
            {
                DownLoad();
                Console.ReadLine();
            }
            public static void DownLoad()
            {
                //如果存在要更新的文件就结束
                if (File.Exists(localPath))
                    return;
    
                Stream localfs = null;
                //如果不存在未上传完文件(需断点续传文件)
                if (File.Exists(tempPath))
                {
                    localfs = new FileStream(tempPath, FileMode.Open);
                }
    
                else
                {
                    localfs = new FileStream(tempPath, FileMode.Create);
                }
                //获取断点
                pos = (int)localfs.Length;
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Headers.Add("Accept-Charset", "GBK,utf-8");
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
                request.Method = "GET";
                request.Timeout = 30000;
                //文件总长度单位(B)
                long total = request.GetResponse().ContentLength;
                Console.WriteLine("总长度为:" + total);
                if (pos > 0)
                    request.AddRange(pos);//偏移到断点
    
                HttpWebResponse responseResult = (HttpWebResponse)request.GetResponse();
                using (Stream stream = responseResult.GetResponseStream())
                {
                    byte[] buffer = new byte[total - pos];
    
                    int readSize = stream.Read(buffer, 0, buffer.Length);
                    while (readSize > 0)
                    {
                        localfs.Write(buffer, 0, readSize);
                        readSize = stream.Read(buffer, 0, buffer.Length);
                        Console.WriteLine("已下载:" + localfs.Length);
                    }
                    localfs.Close();
                    File.Move(tempPath, localPath);//将临时文件改为正常文件后缀
                    Console.WriteLine("下载完成!!!");
                }
    
            }
    
    
        }
    }



  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/bieyang/p/http_breakpoint.html
Copyright © 2011-2022 走看看