usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.IO;usingSystem.Threading;namespacePRojectWenDangManage.Framework
{///<summary>///HTTP文件下载辅助类///</summary>publicclassHttpDownLoadHelper
{///<summary>///文件下载///</summary>///<param name="_Request"></param>///<param name="_Response"></param>///<param name="_fileName">下载文件时的短文件名称</param>///<param name="_fullPath">待下载文件的绝对路径</param>///<param name="_speed">下载速度</param>///<returns></returns>publicstaticboolResponseFile(HttpRequest _Request, HttpResponse _Response,string_fileName,string_fullPath,long_speed)
{try{
FileStream myFile=newFileStream(_fullPath, FileMode.Open, Fileaccess.Read, FileShare.ReadWrite);
BinaryReader br=newBinaryReader(myFile);try{
_Response.AddHeader("Accept-Ranges","bytes");
_Response.Buffer=false;longfileLength =myFile.Length;longstartBytes =0;doublepack =10240;//10K bytes//int sleep = 200;//每秒5次 即5*10K bytes每秒intsleep = (int)Math.Floor(1000* pack / _speed) +1;if(_Request.Headers["Range"] !=null)
{
_Response.StatusCode=206;string[] range = _Request.Headers["Range"].Split(newchar[] {'=','-'});
startBytes= Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength -startBytes).ToString());if(startBytes !=0)
{//Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));}
_Response.AddHeader("Connection","Keep-Alive");
_Response.ContentType="application/octet-stream";
_Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);intmaxCount = (int)Math.Floor((fileLength - startBytes) / pack) +1;for(inti =0; i < maxCount; i++)
{if(_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
Thread.Sleep(sleep);
}else{
i=maxCount;
}
}returntrue;
}catch{returnfalse;
}finally{
br.Close();
myFile.Close();
}
}catch{returnfalse;
}
}
}
}
HttpDownLoadHelper
在webfrom中
stringfilePath=Path.Combine(HttpRuntime.AppDomainAppPath,"Files","项目管理工具.msi");
HttpDownLoadHelper.ResponseFile(Request, Response,"下载显示的名称", filePath,102400);
在mvc中
stringfilePath=Path.Combine(HttpRuntime.AppDomainAppPath,"Files","项目管理工具.msi");
HttpDownLoadHelper.ResponseFile(HttpContext.ApplicationInstance.Context.Request, HttpContext.ApplicationInstance.Context.Response,"下载显示的名称", filePath,102400);