httpHandlers文件下载

原创 2007年10月15日 10:48:00

1:编写一个实现IHttpHandler的类。 

 

 public class DownloadFileProcesser : IHttpHandler
    
...{
        
private DownLoadData logdata = new DownLoadData();
        
public DownloadFileProcesser()
        
...{

        }


        
public void ProcessRequest(HttpContext context)
        
...{
                       
string fileName = context.Request.Url.OriginalString;   //获取请求的url
               string ORIGINALURL = fileName;  //完整的请求路径
       int index = fileName.LastIndexOf("/");    //取最后一个/的未知
            fileName = fileName.Substring(index + 1);                 string filepath = fileName;
            
int iBegin = fileName.LastIndexOf("_");  //取"_"之前和"."后面的,组成aaa.dd
            int iEnd = fileName.LastIndexOf(".");

            
string localPath = System.Configuration.ConfigurationManager.AppSettings["downLoadPath"];  //下载文件的存放路径
            if (iBegin >= 0)
            
...{
                filepath 
= fileName.Substring(0, iBegin) + fileName.Substring(iEnd);
                filepath 
= context.Server.MapPath(localPath + filepath);
            }

            
else
            
...{
                
//  filepath = Path.Combine(localPath, fileName);
                filepath = context.Server.MapPath(localPath + fileName);
            }

            
//  downLoadHandle aa = new downLoadHandle(outputBinary);
            if (File.Exists(filepath))  //文件是否存在。不存在的话按照真实文件名下载
            ...{
                outputBinary(fileName, filepath, context);
                sendState 
= 1;
            }

            
else
            
...{
                context.Response.Status 
= "404 Not Found ";
                sendState 
= 0;
            }

            logdata.SENDSTATE 
= sendState;
           
int indexLfn = filepath.LastIndexOf("/");
            
string  localFileName = filepath.Substring(index1 + 1);
            logdata.LOCALFILENAME 
= localFileName;
            logdata.ORIGINALURL 
= ORIGINALURL;
            WriteDownLoadLog();
        }

   
// 文件按照二进制流循环输出。其实没必要这么写。
        public void outputBinary(string fileName, string filepath, HttpContext context)
        
...{

            context.Response.ContentType 
= "application/octet-stream";
            context.Response.AppendHeader(
"Content-Disposition""attachment; filename=" + fileName);
            
using (System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            
...{
                
byte[] aLogData = new byte[1024];
                
int len;
                
//设定每次读取1024个字节。避免多人下载时过慢。
                while ((len = fs.Read(aLogData, 0, aLogData.Length)) > 0)
                
...{
                    context.Response.BinaryWrite(_FixBuffer(aLogData, len));
                }

            }


        }

        
/**//// <summary>
        
/// 取指定长度的文件
        
/// </summary>
        
/// <param name="aLogData"></param>
        
/// <param name="len"></param>
        
/// <returns></returns>

        private byte[] _FixBuffer(byte[] aLogData, int len)
        
...{
            
if (aLogData.Length == len)
                
return aLogData;

            
byte[] buffer = new byte[len];
            Array.Copy(aLogData, buffer, len);
            
return buffer;
        }

        
public bool IsReusable
        
...{
            
get
            
...{
                
return true;
            }

        }

}

 

2:配置webconfitg

<httpHandlers>

<!--当请求的后缀为.cab的时候,调用DownloadFileProcesser这个继承IHttpHandler接口的类-!>
   <add verb="GET,POST" path="*.cab" type="DownloadFileProcesser"/>
  </httpHandlers>

3:运行IIS服务管理器,右键点击默认Web站点,选择属性,移动到Home目录选项页,并点击配置按钮。应用程序配置对话框弹出来了。点击添加按钮并在可执行字段输入aspnet_isapi.dll文件路径,在扩展字段输入.kim
ps:如果你的操作系统是XP SP2的话,在输入aspnet_isapi.dll路径时需要手工输入,不能用复制粘贴的形式,否则保存按钮变灰。浏览时去掉check file exit选项。

WebConfig的httpHandlers无效解决处理

有个站点是基于集成模式开发的,却硬要挂在经典模式的父站点下面,那就要做相应更改,基本就是Handlers换httpHandlers,Modules换httpModules,从节点移到,然而怎么改都进不...
  • bihix33
  • bihix33
  • 2014年11月16日 10:03
  • 807

asp.net mvc 5.0 借助路由规则实现*.aspx与HttpHandler交互

实现效果是通过访问http://localhost/ajax.aspx执行ashx文件,原本打算使用httphandler在webconfig中的配置实现,但不知道是程序环境问题还是我个人资质有限,不...
  • willianyy
  • willianyy
  • 2015年08月17日 14:47
  • 1171

文件上传和下载——文件下载

我们做完文件上传之后,就要来做文件下载了。 Web应用中实现文件下载的方式: 超链接直接指向下载资源。 程序实现下载需设置两个响应头: 设置Content-Type的值为:application...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年09月14日 22:43
  • 1269

struts2的文件下载(0):文件下载

Struts2提供了stream结果类型,该结果类型可支持文件下载功能。指定stream结果类型时,需要指定一个inputName参数,该参数指定了一个输入流,这个输入流就是被下载文件的入口。通过St...
  • confirmAname
  • confirmAname
  • 2013年07月01日 22:03
  • 593

文件上传与下载之文件下载

文件下载实现 1.实现文件下载 文件下载不需要第三方组件支持,自定义完成即可 客户端 文件下载列表页面:      * a标签的href属性,直接指定对应服务器端文件的路径.        ...
  • CSDN_GIA
  • CSDN_GIA
  • 2017年01月08日 09:43
  • 332

配置文件HttpHandlers和HttpModules接口详解

本文介绍httpHandlers和httpModules接口介绍。 ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断...
  • shllshl
  • shllshl
  • 2014年07月16日 10:48
  • 262

文件下载和批量下载

/**      *       * @Title downFileByZip       * @Description 文件批量下载(zip格式)       * @param list ...
  • wyazyf
  • wyazyf
  • 2017年05月11日 10:54
  • 70

文件上传与下载--下载

1、下载servletpublic class DownLoadServlet extends HttpServlet{ /** * */ private sta...
  • csdnindex
  • csdnindex
  • 2017年06月19日 18:59
  • 87

下载图片,下载文件

package com.example.test3;import java.io.File;import java.io.FileOutputStream;import java.io.InputSt...
  • RootYxb
  • RootYxb
  • 2016年06月02日 16:16
  • 145

C#怎么实现文件下载功能的四种方法

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu...
  • wangnaisheng
  • wangnaisheng
  • 2014年06月19日 15:46
  • 9121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:httpHandlers文件下载
举报原因:
原因补充:

(最多只允许输入30个字)