ASP.NET文件下载函数

在你的Page_Load中添加这样的代码:

Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000); if (!success)      Response.Write("下载文件出错!"); Page.Response.End();

文件下载函数代码为:

publicstaticbool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)     {         try         {             FileStream myFile =new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);             BinaryReader br =new BinaryReader(myFile);             try             {                 _Response.AddHeader("Accept-Ranges", "bytes");                 _Response.Buffer =false;                 long fileLength = myFile.Length;                 long startBytes =0;                      double pack =10240; //10K bytes                 //int sleep = 200;   //每秒5次   即5*10K bytes每秒                 int sleep = (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);                 int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) +1;                 for (int i =0; i < maxCount; i++)                 {                     if (_Response.IsClientConnected)                     {                         _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));                         Thread.Sleep(sleep);                     }                     else                     {                         i=maxCount;                     }                 }             }             catch             {              returnfalse;             }             finally             {                 br.Close();                 myFile.Close();             }         }         catch         {             returnfalse;         }         returntrue;     }

这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口.

 

文章转自:http://www.cnblogs.com/liping13599168/archive/2009/02/08/1386111.html 

posted @ 2012-09-16 19:51  edwin_sh  阅读(140)  评论(0编辑  收藏  举报