none
关于.NET实现断点续传问题 RRS feed

  • 问题

  • 平台: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出开始返回

    2010年1月8日 2:47

答案

全部回复


  • /// </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
    努力+方法=成功
    2010年1月9日 11:08
  • 断点续传,你需要使用Range HTTP头。每次发送已经下载的字节数



    request.AddRange((int)lStartPos); //设置Range值
    代码搜索

    c# 断点 下载 range
    【孟子E章】
    2010年1月12日 13:42
    版主