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("下载完成!!!");
                }
    
            }
    
    
        }
    }



  • 相关阅读:
    LUA表的引用理解
    UNITY 打包安卓APK
    UNITY打包问题
    U3D 打包时找不到tag的问题
    break prefab instance的原理
    C#调用LUA函数
    LUA 利用#遍历表的问题
    U3D笔记11:47 2016/11/30-15:15 2016/12/19
    Unity3D 预设打包的注意事项
    回调 和 覆盖
  • 原文地址:https://www.cnblogs.com/bieyang/p/http_breakpoint.html
Copyright © 2011-2022 走看看