下载文件的安全性与文件下载时的断点续传功能
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();
}
}
浙公网安备 33010602011771号