最近,在做单位的博硕士论文数据库时,碰到这样一个问题:当把论文的全文的url存入数据库时,在程序中通过Response.Redirect方法进行论文的下载。可是如果论文是已知类型的文件,如htm,doc等,就会在IE中打开它,可我想实现不管是什么类型的文件都要跳出下载对话框。在网上查了一阵,终于查到了解决办法。
有的时候我们不想让用户直接在IE中打开已知类型的文件,比如Word,而希望能直接下载,这时候可用下面代码来替换Response.Redirect
FileStream fileStream=new FileStream(pFileName,FileMode.Open)
long fileSize = fileStream.Length;
Context.Response.ContentType="application/octet-stream";
Context.Response.AddHeader("Content-Disposition","attachment; filename="" + HttpUtility.UrlEncode(fileName,Encoding.UTF8));
Context.Response.AddHeader("Content-Length",fileSize.ToString());
byte[] fileBuffer=new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
Context.Response.BinaryWrite(fileBuffer);
Context.Response.End();
简要说明:第一行是创建一个文件流,打开pFileName文件,其中pFileName是文件在硬盘上的绝对路径。HttpUtility.UrlEncode(fileName,Encoding.UTF8))是最需要注意的,对文件路径进行编码,以解决中文字符乱码问题。
上述方法实际上通过文件流由服务器直接写到客户端的浏览器的,所以无论什么类型的文件,都会跳出下载对话框,而不是在IE中打开。使用这种方法还有一个好处是,存放文件的目录可以不在服务器的虚拟目录中,增强了数据的安全性。
正文
ASP.NET直接下载一个文件,而不是在IE中打开它2005-07-11 07:55:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/information/2656.html
阅读(5139) | 评论(1)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论