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("下载完成!!!"); } } } }
时间: 2024-10-11 15:55:38