/// <summary> /// 普通文件下载 /// </summary> /// <param name="URL"></param> /// <param name="filename"></param> /// <returns></returns> public static bool DownloadFile(string URL, string filename) { try { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URL); HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); Stream netFs = webResponse.GetResponseStream(); Stream fs = new FileStream(filename,FileMode.Create); byte[] by = new byte[1024]; int osize = netFs.Read(by, 0, (int)by.Length); while (osize > 0) { fs.Write(by, 0, osize); osize = netFs.Read(by, 0, (int)by.Length); } fs.Close(); netFs.Close(); webResponse.Close(); webRequest.Abort(); return true; } catch (System.Exception e) { System.Console.WriteLine(e.ToString()); return false; } }
/// <summary> /// 断点传输 /// </summary> /// <param name="URL"></param> /// <param name="filename"></param> /// <returns></returns> public static bool DownloadFile2(string URL, string filename) { StringBuilder progress = new StringBuilder(); int httpStatusCode = 200; //打开上次下载的文件或新建文件 long lStartPos = 0; FileStream fs; if (File.Exists(filename))//另外如果文件已经下载完毕,就不需要再断点续传了,不然请求的range 会不合法会抛出异常。 { fs = File.OpenWrite(filename); lStartPos = fs.Length; fs.Seek(lStartPos, SeekOrigin.Current); //移动文件流中的当前指针 } else { fs = new FileStream(filename, FileMode.Create); lStartPos = 0; } try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); if (lStartPos > 0) { request.AddRange((int)lStartPos); //设置Range值 } WebResponse response = request.GetResponse(); //向服务器请求,获得服务器回应数据流 Stream netFs = response.GetResponseStream(); long totalSize = response.ContentLength; Console.WriteLine($"totalsize:{totalSize / 1024 / 1024}MB"); // 从lStartPos位置开始读获得的大小 long hasDownSize = 0; byte[] nbytes = new byte[512];//521,2048 etc int nReadSize = 0; nReadSize = netFs.Read(nbytes, 0, nbytes.Length); while (nReadSize > 0) { progress.Clear(); fs.Write(nbytes, 0, nReadSize); nReadSize = netFs.Read(nbytes, 0, nbytes.Length); hasDownSize += nReadSize; //progress.Append("("+(((double)hasDownSize * 100 / totalSize).ToString("0.00")) + " %)"); //Console.WriteLine(progress); } fs.Close(); netFs.Close(); return true; } catch (WebException ex) { var rsp = ex.Response as HttpWebResponse; httpStatusCode = (int)rsp.StatusCode; fs.Close(); if (httpStatusCode == 416) //request.AddRange((int)lStartPos) 超出范围 { Console.WriteLine("文件均下载完成"); return true; } else { Console.WriteLine("下载过程中出现错误:" + ex.ToString()); return false; } } }
使用例子: DownloadFile2("http://localhost//file//Windows Kits.rar", "Windows Kits.rar");