在ASP.NET中,有两个控件可以提供客户下载服务器端的文件:HyperLink控件和LinkButton控件(还没用过),HyperLink控件这个控件只能通过相对路径找到要下载的文件,而且更糟糕的是暴露了文件在服务器中的路径,可能会引出很多麻烦。
这里我们通过设置Http的Header来实现客户端下载的功能。这种方法不用打开一个新的IE窗口,Client端也看不到文件的路径,比较完美的实现了我想要的功能。现贴出代码,大家分享一下点击按钮直接下载文件(隐藏文件路径)
点击按钮直接下载文件(隐藏文件路径)FileStream fileStream=new FileStream("D:\\documents\\test.doc",FileMode.Open); 
点击按钮直接下载文件(隐藏文件路径)
long fileSize = fileStream.Length; 
点击按钮直接下载文件(隐藏文件路径)Context.Response.ContentType
="application/octet-stream"
点击按钮直接下载文件(隐藏文件路径)
//中文文件名需要UTF8编码
点击按钮直接下载文件(隐藏文件路径)
Context.Response.AddHeader("Content-Disposition","attachment; filename=\"" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + "\""); 
点击按钮直接下载文件(隐藏文件路径)Context.Response.AddHeader(
"Content-Length",fileSize.ToString()); 
点击按钮直接下载文件(隐藏文件路径)
byte[] fileBuffer=new byte[fileSize]; 
点击按钮直接下载文件(隐藏文件路径)fileStream.Read(fileBuffer, 
0, (int)fileSize);
点击按钮直接下载文件(隐藏文件路径)fileStream.Close();
点击按钮直接下载文件(隐藏文件路径)Context.Response.BinaryWrite(fileBuffer); 
点击按钮直接下载文件(隐藏文件路径)Context.Response.End();

相关文章: