asp.net使用一般处理程序实现文件下载

首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>文件下载</title>
    <meta charset="utf-8" />
</head>
<body>
    <!--该方式不行,1:如果访问的是类似文本等浏览器可以处理的文件,则是浏览器打开显示的方式,并不是文件下载;2:如果访问的是App_Data文件夹里的文件,由于.net的机制不允许访问App_Data文件夹资源,所以会报“请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径。”-->
    <a href="App_Data/readme.txt">下载readme.txt文件</a>
    <br />
    <a href="DownloadFileHandler.ashx">下载readme.txt文件</a>
</body>
</html>

一般处理程序的代码如下

using System.IO;
using System.Web;

namespace Zhong.Web
{
    /// <summary>
    /// DownloadFileHandler 的摘要说明
    /// </summary>
    public class DownloadFileHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string filePath = context.Server.MapPath("~/App_Data/readme.txt");
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Dispose();

            context.Response.ContentType = "application/octet-stream";
            context.Response.AddHeader("Content-Disposition", "attachment; filename=readme.txt");
            context.Response.BinaryWrite(bytes);
            context.Response.Flush();

            //大文件下载的解决方案
            //context.Response.ContentType = "application/x-zip-compressed";
            //context.Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
            //string filename = Server.MapPath("~/App_Data/move.zip");
            //context.Response.TransmitFile(filename);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

点击第一个链接访问,显示如下:

点击第二个链接访问,下载文件:

由于我之前已经测试过一次,所以这次下载时命名为readme(1).txt

时间: 2024-08-03 09:40:55

asp.net使用一般处理程序实现文件下载的相关文章

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f "fmt" "log" "net/http" // "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { // r.ParseForm() // f.P

asp.net 注册 HTTP 处理程序 (httphandler配置)

创建自定义 HTTP 处理程序类后,必须在 Web.config 文件中注册该类.这将允许 ASP.NET 调用 HTTP 处理程序,以便处理对具有指定文件扩展名的资源的请求. 在Web.config 文件中, 对于在传统模式下运行的 IIS 7.0, 可以在 httpHandlers 节中注册处理程序,并将该处理程序映射到 Aspnet_isapi.dll 文件. 对于在集成模式下运行的 IIS 7.0,可以使用 system.WebServer 节中的 handlers 元素注册处理程序 <

asp.net中一般处理程序中添加session

asp.net中使用一般处理程序(.ashx)添加session,利用context.session["xxx"] = value的方式把值保存到session:运行的时候会出现该对象尚未引用. 解决办法:1,在一般处理程序的类后面添加IRequiresSessionState.例如public class xxx : IHttpHandler, IRequiresSessionState. 2,引入session所使用的类库,using System.Web.SessionState

ASP.NET一般网站处理程序基础

网站处理过程:请求——处理——响应 新建——项目——WEB——ASP.NET空Web应用程序(推荐) 添加一般处理程序,ashx格式 其中ProcessRequest是对请求进行相应的函数 content.Response.ContentType=“text/html”;确定响应内容类型 string action=context.Request["name"];//请求客户端输入name值并赋值给服务器端,通过Request拿到的参数值都是字符串类型 content.Response

ASP.NET ----ashx一般处理程序

asp.net中的一般处理程序,文件后缀为ashx. 代码示例: /// <summary> /// login 的摘要说明 /// </summary> public class login : IHttpHandler { public void ProcessRequest(HttpContext context) { //context.Response.ContentType = "text/plain"; //context.Response.Wri

初识ASP.NET---一般处理程序

问题来源: 今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现不管怎么和源代码对比都无法显示想要的功能. 这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我能够利用ASP.NET的一般处理程序. 我果然是菜鸟刚開始学习的人,由于我还没有接触过一般处理程序. 什么是一般处理程序: 一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类.不论什么一个实现了IHttpHandler接口的类.是作为一个外部请求的目标程序的前提. (凡是没有实现此

初始ASP.NET---一般处理程序

问题来源: 今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现无论怎么和源码对照都无法显示想要的功能.这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我可以利用ASP.NET的一般处理程序. 我果然是菜鸟初学者,因为我还没有接触过一般处理程序! 什么是一般处理程序: 一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类.任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提.(凡是没有实现此接口的类,就不能被

【译】ASP.NET应用程序和页面生命周期

为何翻译此文 一.此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量: 二.锻炼自己的英文技术文章翻译能力,提高英文技术文档阅读能力: 三.了解掌握ASP.NET页面生命周期是非常必要的,这有助于我们更加灵活的控制页面,以我们需要的方式编程开发: 关于原文作者 原文作者:Shivprasad koirala 原文地址:http://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Pa

ASP.NET应用程序与页面生命周期

在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束.在这个过程中,首先我们需要了解ASP.NET请求的2个大致的步骤.其次我们将详细了解 'httphandler ',' httpmodule和 asp.net 页面对象(Page)中不同的事件的执行顺序,逻辑. 二个步骤的过程:asp.net请求处理,2步的过程如下所示,用户发送一个请求到IIS 服务器: 1