System.IO.Stream iStream = null;
// 读取块中 10K 字节的缓冲区:
字节[]缓冲区=新字节[10240];
// 文件长度:
整数长度;
// 要读取的总字节数:
长数据读取;
// 标识要下载的文件,包括其路径。
string filepath = @"E:softwareSQL Server 2000 个人版.ISO";
// 识别文件名。
字符串文件名 = System.IO.Path.GetFileName(文件路径);
尝试
{
// 打开文件。
iStream = new System.IO.FileStream(文件路径, System.IO.FileMode.Open,
System.IO.FileAccess.Read、System.IO.FileShare.Read);
Response.Clear();
// 要读取的总字节数:
dataToRead = iStream.Length;
长 p = 0;
if(Request.Headers["范围"]!=null)
{
响应.StatusCode = 206;
p = long.Parse(Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
如果(p!= 0)
{
Response.AddHeader("内容范围","字节" + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("内容长度",((long)(dataToRead-p)).ToString());
Response.ContentType = "应用程序/八位字节流";
Response.AddHeader("Content-Disposition", "附件; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = p;
待读数据 = 待读数据 - p;
// 读取字节。
while (要读取的数据 > 0)
{
// 验证客户端是否已连接。
if (Response.IsClientConnected)
{
// 读取缓冲区中的数据。
长度 = iStream.Read(缓冲区, 0, 10240);
// 将数据写入当前输出流。
Response.OutputStream.Write(缓冲区, 0, 长度);
// 将数据刷新到 HTML 输出。
响应.Flush();
缓冲区=新字节[10240];
待读数据=待读数据-长度;
}
别的
{
//防止用户断开连接时无限循环
待读数据=-1;
}
}
}
catch(异常前)
{
// 捕获错误(如果有)。
Response.Write("错误:" + ex.Message);
}
最后
{
if (iStream != null)
{
//关闭文件。
iStream.Close();
}
响应.End();
}