下载文件的安全性与文件下载时的断点续传功能

private void DownLoad()
  {
   long speed=1024000;
   FileStream fileStream = new FileStream(@"e:\新建文件夹 (2)\WS网站设计反馈点(20060523-20060725)改进跟踪.doc", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
   BinaryReader reader = new BinaryReader(fileStream);
   try
   {
    HttpContext.Current.Response.AddHeader("Accept-Ranges", "bytes");
    HttpContext.Current.Response.Buffer = false;
    long fileLength = fileStream.Length;
    long startBytes = 0;

    int pack = 1024;//1k bytes
    int sleep = (int)Math.Floor((double)((1000*pack)/speed))+1;
    if (HttpContext.Current.Request.Headers["Range"] != null)
    {
     HttpContext.Current.Response.StatusCode = 206;
     string[] range = HttpContext.Current.Request.Headers["Range"].Split(new char[] { '=','-'});
     startBytes = Convert.ToInt64(range[1]);
    }

    long value = fileLength - startBytes;
    HttpContext.Current.Response.AddHeader("Content-Length", value.ToString());
    if (startBytes != 0)
    {
     HttpContext.Current.Response.AddHeader("Content-Range",string.Format("bytes{0}-{1}/{2}",startBytes,fileLength-1,fileLength));
    }
    HttpContext.Current.Response.AddHeader("Connection","Keep-Alive");
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode("WS网站设计反馈点(20060523-20060725)改进跟踪.doc",System.Text.Encoding.UTF8));

    reader.BaseStream.Seek(startBytes,SeekOrigin.Begin);
    int maxCount = (int)Math.Floor((double)((fileLength-startBytes)/pack))+1;
    for (int i = 0; i < maxCount; i++)
    {
     if (HttpContext.Current.Response.IsClientConnected)
     {
      HttpContext.Current.Response.BinaryWrite(reader.ReadBytes(pack));
      Thread.Sleep(sleep);
     }
     else
     {
      i = maxCount;
     }
    }
   }
   catch(Exception ex)
   {
    HttpContext.Current.Response.Write(ex.Message);
    
   }
   finally
   {
    reader.Close();
    fileStream.Close();
   }
  }

posted @ 2006-08-18 11:21  charles  阅读(290)  评论(1)    收藏  举报