积极答复者
关于.NET实现断点续传问题

问题
-
平台:VS 2005,IIS 5.1 ,WINDOWS XP,.NET 2.0
问题:不能实现断点续传
关键代码如下:
HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url);//url为一个服务器的文件路径
FileStream fs = new FileStream(local, FileMode.OpenOrCreate);//local为本地一个未下载完成的文件
if (fs.Length> 0)
hwr.AddRange(fs.Length);//添加Range,告诉服务器把文件名为url的文件从fs.Length处开始发送数据到客户端
int bufferSize = 512;//缓冲区大小为512字节
byte[] buffer = new byte[bufferSize];
Stream s = hwr.GetResponse().GetResponseStream();//开始获取服务器端数据
int readSize = s.Read(buffer, 0, bufferSize);
while (readSize > 0)
{fs.Write(buffer, 0, readSize);
readSize = s.Read(buffer, 0, bufferSize);
}
无论何时执行这段代码,服务器总是从文件开始的地方返回数据,并不是要求的从fs.Length出开始返回
答案
-
断点续传,你需要使用Range HTTP头。每次发送已经下载的字节数
request.AddRange((int)lStartPos); //设置Range值
代码搜索
c# 断点 下载 range
【孟子E章】- 已标记为答案 Andrew_ZhuModerator 2010年1月15日 2:48
全部回复
-
/// </summary> /// <param name="URL">服务器URL地址</param> /// <param name="Filename">存放到本地的路径</param> /// <param name="Prog">进度条</param> public static void DownFile(string URL, string Filename, ProgressBar Prog) { try { HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.Create(URL); HttpWebResponse myrp = (HttpWebResponse)Myrq.GetResponse(); long totalBytes = myrp.ContentLength; Prog.Maximum = (int)totalBytes; Stream st = myrp.GetResponseStream(); Stream so = new FileStream(Filename, FileMode.Create); long totalDownloadedByte = 0; byte[] by = new byte[1024]; int osize = st.Read(by, 0, (int)by.Length); while (osize > 0) { totalDownloadedByte = osize + totalDownloadedByte; Application.DoEvents(); so.Write(by, 0, osize); Prog.Value = (int)totalDownloadedByte; osize = st.Read(by, 0, (int)by.Length); } so.Close(); st.Close(); MessageBox.Show("下载完毕!", "下载提示:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); }
参照这里
http://blog.csdn.net/hxy2261/archive/2009/08/25/4482026.aspx
努力+方法=成功 -
断点续传,你需要使用Range HTTP头。每次发送已经下载的字节数
request.AddRange((int)lStartPos); //设置Range值
代码搜索
c# 断点 下载 range
【孟子E章】- 已标记为答案 Andrew_ZhuModerator 2010年1月15日 2:48