• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET实现从服务器下载文件问题处理

ASP.NET实现从服务器下载文件问题处理

作者:IT虾米架构师的博客 字体:[增加 减小] 来源:互联网 时间:2017-05-11

IT虾米架构师的博客通过本文主要向大家介绍了微型asp.net服务器,架设asp.net服务器,迷你asp.net服务器,asp.net,asp net培训等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

假设在服务器的根目录下有个名为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>");
 }
 }
</div>

这个函数是下载功能的组程序,其中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>");
 }
 } 
</div>

从这个事件可以看出DownloadFile函数的第一个参数为文件的绝对路径不然程序会报错。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • ASP.NET实现从服务器下载文件问题处理
  • asp.net实现服务器文件下载到本地的方法
  • asp.net上传图片到服务器方法详解
  • asp.net保存网上图片到服务器的实例
  • asp.net保存网上图片到服务器的实例
  • asp.net检查服务器上目录或文件是否存在的方法
  • asp.net获取服务器基本信息的方法代码
  • asp.net服务器端指令include的使用及优势介绍
  • ASP.NET将文件写到另一服务器(图文教程)及注意事项

相关文章

  • 2018-08-20详解.Net Core中的日志组件(Logging)
  • 2017-05-11asp.net中如何批量导出access某表内容到word文档
  • 2017-05-11Asp.Mvc 2.0用户的编辑与删除实例讲解(5)
  • 2018-08-20ASP.net WebAPI跨域调用问题的解决方法
  • 2017-05-11Visual Studio快速开发以及Visual Studio 2010新功能介绍
  • 2017-05-11在SQL Server中使用CLR调用.NET方法实现思路
  • 2018-08-20.Net Core2.1 WebAPI新增Swagger插件详解
  • 2017-05-11asp.net 生成静态页笔记
  • 2017-05-11asp.net下生成英文字符数字验证码的代码
  • 2017-05-11ASP.NET MVC 中实现基于角色的权限控制的处理方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#使用正则表达式实例
    • ASP.NET对大文件上传的解决方案
    • C# 数组查找与排序实现代码
    • ASP.NET MVC引入JQUERY JQRTE控件
    • indexof 和 indexofany的区别介绍
    • .Net遍历窗体上控件的方法
    • ASP.NET中使用开源组件NPOI快速导入导出Execl数据
    • ASP.NET MVC验证码功能实现代码
    • .NET从优酷专辑中采集所有视频及信息(VB.NET代码)
    • .net/c# memcached缓存获取所有缓存键的方法步骤

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有