假设在服务器的根目录下有个名为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实现从服务器下载文件题目处置惩罚相干文章请关注ki4网!