按钮事件 直接下载 任何文件格式

 

#region -- 下载文件按钮事件-----------------

    
string FullFileName =Server.Mappath("~/"+"要下载的文件相对路径")
    
string strFileName = FullFileName.Substring(FullFileName.LastIndexOf("/")+1); //获取文件名(不包含路径)
    
    FileInfo DownloadFile;
    
try
    {   
     DownloadFile 
= new FileInfo(FullFileName); //设置要下载的文件
   
     Response.Clear();                             
//清除缓冲区流中的所有内容输出

     Response.ClearHeaders();                      
//清除缓冲区流中的所有头,不知道为什么,不写这句会显示错误页面

     Response.Buffer 
= false;                      //设置缓冲输出为false

     
//设置输出流的 HTTP MIME 类型为application/octet-stream

     Response.ContentType 
= "application/octet-stream";

     
//将 HTTP 头添加到输出流

     Response.AppendHeader(
"Content-Disposition",

      
"attachment;filename=" + strFileName + DownloadFile.Extension );

     Response.AppendHeader(
"Content-Length", DownloadFile.Length.ToString());

     
//将指定的文件直接写入 HTTP 内容输出流。

    
//一定要注意是WriteFile不是Write(害得我搞了一晚上)

     Response.WriteFile(DownloadFile.FullName);

     Response.Flush();        
//向客户端发送当前所有缓冲的输出

     Response.End();          
//将当前所有缓冲的输出发送到客户端,这句户有时候会出错,可以尝试把这句话放在整个函数的最后一行。也可以用HttpContext.Current.ApplicationInstance.CompleteRequest ()方法代替
    }
    
catch ( Exception err)
    {
    
//出错处理
     
//this.labelStatus.Text = "无法下载文件:" + sFileName + ",由于:" + err.Message;
    }

    
#endregion   -- 下载文件按钮事件-----------------
posted @ 2008-11-05 15:48  景天  阅读(280)  评论(0编辑  收藏  举报