zoukankan      html  css  js  c++  java
  • 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>
    View Code

    一般处理程序的代码如下

    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;
                }
            }
        }
    }
    View Code

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

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

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

  • 相关阅读:
    php发送http请求带json格式数据
    a标签跳转,打开一个新页面
    echarts图例多行显示,并且全部对齐
    原子性,有序性,可见性
    winds消息大全
    C#中的结构体和对象区别
    装饰者模式
    hashMapp
    linux 定时任务
    windsServer2008设置定时重启
  • 原文地址:https://www.cnblogs.com/godbell/p/7149932.html
Copyright © 2011-2022 走看看