ASP.NET实现从服务器下载文件问题处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET实现从服务器下载文件问题处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2710字,纯文字阅读大概需要4分钟。
内容图文
假设在服务器的根目录下有个名为Download的文件夹,这个文件夹存放一些提供给引用程序下载的文件
public void DownloadFile(string path, string name){ try{ System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name)); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 Response.AddHeader("Content-Length", file.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 Response.WriteFile(file.FullName); // 停止页面的执行 //Response.End(); HttpContext.Current.ApplicationInstance.CompleteRequest(); } catch (Exception ex){ Response.Write("<script>alert('系统出现以下错误://n" + ex.Message + "!//n请尽快与管理员联系.')</script>"); } }
这个函数是下载功能的组程序,其中path是文件的绝对路径(包括文件名),name是文件名,这个程序是能够运行的.其中如果将HttpContext.Current.ApplicationInstance.CompleteRequest();替换为Response.End(); 就会出现一下错误:异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.但是这个错误不会影响程序的运行,虽然try能够捕捉这个异常(不知道为什么)
在网上找了一些这个问题产生的原因:如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中Application_EndRequest 事件。不执行 Response.End 后面的代码行。此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法均在内部调用 Response.End。
提供的解决方法有:
要解决此问题,请使用下列方法之一:
对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest() 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。
对于 Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如:
Response.Redirect ("nextpage.aspx", false); catch (System.Threading.ThreadAbortException e){ throw; } 接下来就可以通过其他函数或者事件调用这个函数来下载服务器上的文件了 protected void btnOutput_Click(object sender, EventArgs e){ try{ string strPath = Server.MapPath("/") + "Download//学生基本信息模版.xls"; DownloadFile(strPath, "学生基本信息模版.xls"); } catch (Exception exp){ Response.Write("<script>alert('系统出现以下错误://n" + exp.Message + "!//n请尽快与管理员联系.')</script>"); } }
从这个事件可以看出DownloadFile函数的第一个参数为文件的绝对路径不然程序会报错。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
内容总结
以上是互联网集市为您收集整理的ASP.NET实现从服务器下载文件问题处理全部内容,希望文章能够帮你解决ASP.NET实现从服务器下载文件问题处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。