p_page.Response.AppendHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
p_page.Response.AppendHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
}
p_page.Response.AppendHeader("Connection", "Keep-Alive");
p_page.Response.ContentType = "application/octet-stream";
p_page.Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(p_strFileName,System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
DateTime DownTimeStart = DateTime.Now;
for (int i = 0; i < maxCount; i++)
{
if(i == 1)
{
DownTimeStart = DateTime.Now;
}
if (p_page.Response.IsClientConnected)
{
p_page.Response.BinaryWrite(br.ReadBytes(pack));
p_page.Response.Flush();
Thread.Sleep(sleep);
//开始计算时间
bRtn = true;
}
else
{
maxCount = i;
bRtn = false;
break;
}
}
#endregion
System.TimeSpan tsDownTimeLen = DateTime.Now -DownTimeStart;
this.FactDownSpeed = (int)Math.Floor((int) Math.Floor((startBytes + maxCount * pack ) / tsDownTimeLen.TotalSeconds) / 1024);
}
catch
{
bRtn = false;
}
finally
{
p_page.Response.Flush();
br.Close();
myFile.Close();
}
#endregion
}
catch
{
bRtn = false;
}
return bRtn;
}