- 浏览: 424919 次
- 性别:
- 来自: 唐山
文章分类
最新评论
-
hautbbs:
谢谢分享!
ASP.NET 导出Excel 和csv -
hautbbs:
感谢分享!
ASP.NET 导出Excel乱码的终极解决 -
wyf:
zcl920 写道只能说 看不懂。要发就发全 取一段出来 有什 ...
图片上绘制文字换行处理 -
zcl920:
只能说 看不懂。要发就发全 取一段出来 有什么用。
图片上绘制文字换行处理 -
380086154:
有用,谢谢。
js比较日期
1. 首先新建一个用于下载文件的page页,如download.aspx,里面什么东西也没有。
2. 添加一个DownloadHandler类,它继承于IHttpHandler接口,可以用来自定义HTTP 处理程序同步处理HTTP的请求。
using System.Web; using System; using System.IO; public class DownloadHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpResponse Response = context.Response; HttpRequest Request = context.Request; System.IO.Stream iStream = null; byte[] buffer = new Byte[10240]; int length; long dataToRead; try { string filename = FileHelper.Decrypt(Request["fn"]); //通过解密得到文件名 string filepath = HttpContext.Current.Server.MapPath("~/") + "files/" + filename; //待下载的文件路径 iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); Response.Clear(); dataToRead = iStream.Length; long p = 0; if (Request.Headers["Range"] != null) { Response.StatusCode = 206; p = long.Parse(Request.Headers["Range"].Replace("bytes=", "").Replace("-", "")); } if (p != 0) { Response.AddHeader("Content-Range", "bytes " + p.ToString() + "-" + ((long) (dataToRead - 1)).ToString() + "/" + dataToRead.ToString()); } Response.AddHeader("Content-Length", ((long) (dataToRead - p)).ToString()); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.GetEncoding(65001).GetBytes(Path.GetFileName(filename)))); iStream.Position = p; dataToRead = dataToRead - p; while (dataToRead > 0) { if (Response.IsClientConnected) { length = iStream.Read(buffer, 0, 10240); Response.OutputStream.Write(buffer, 0, length); Response.Flush(); buffer = new Byte[10240]; dataToRead = dataToRead - length; } else { dataToRead = -1; } } } catch (Exception ex) { Response.Write("Error : " + ex.Message); } finally { if (iStream != null) { iStream.Close(); } Response.End(); } } public bool IsReusable { get { return true; } } }
3. 这里涉及到一个文件名加解密的问题,是为了防止文件具体名称暴露在状态栏中,所以添加一个FileHelper类,代码如下:
public class FileHelper { public static string Encrypt(string filename) { byte[] buffer = HttpContext.Current.Request.ContentEncoding.GetBytes(filename); return HttpUtility.UrlEncode(Convert.ToBase64String(buffer)); } public static string Decrypt(string encryptfilename) { byte[] buffer = Convert.FromBase64String(encryptfilename); return HttpContext.Current.Request.ContentEncoding.GetString(buffer); } }利用Base64码对文件名进行加解密处理。
4. 在Web.config上,添加httpHandlers结点,如下:
<system.web> <httpHandlers> <add verb="*" path="download.aspx" type="DownloadHandler" /> </httpHandlers> </system.web>5. 现在新建一个aspx页面,对文件进行下载:
Default.aspx代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>文件下载</title> </head> <body> <form id="form1" runat="server"> <div> <asp:HyperLink ID="link" runat="server" Text="文件下载"></asp:HyperLink> </div> </form> </body> </html>
Default.aspx.cs代码如下:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string url = FileHelper.Encrypt("DesignPattern.chm"); link.NavigateUrl = "~/download.aspx?fn=" + url; } }这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口。
发表评论
-
登录时记住用户名密码的实现方式
2019-06-12 15:11 2959登录的时候记住用户 ... -
CAS 实现单点登录 .NET MVC
2016-05-24 17:14 1072http://www.cnblogs.com/woxpp/p ... -
.NET开发邮件发送功能的全面教程(含邮件组件源码)
2015-03-31 09:43 1088原文地址:http://www.cnblogs.com/he ... -
开发Web组合
2015-01-04 11:39 5831、数据库操作 ORM-Dapper 2、前台界面布局采 ... -
基于 Bootstrap 构建的网站
2014-12-14 14:12 605文档,下载地址:http://v3.bootcss.com ... -
iis8 默认不支持svc解决方法
2014-09-18 18:57 728以下内容对于使用WIN2012 部署V9的时候使用。 ... -
C# 连接Oracle(利用ODP.net,不安装oracle客户端)
2014-07-11 09:37 1657C# 连接Oracle(利用ODP.net,不安装oracl ... -
C# Attribute 特性,过期特性
2014-05-27 15:18 1776通过下列过程将属性应用到代码元素。 通过从 .NE ... -
.NET画实时直方图
2011-12-30 09:37 872using System; using System.Col ... -
设置combobx选中项
2011-12-21 15:20 1002cbRole.SelectedIndex = cbRole.I ... -
文档树状结构化目录管理方法
2011-12-20 09:50 2095本文适用于附件(各类文档、图片和压缩包等,下同)比较多的 ... -
.StringTemplate替换模板
2011-11-03 10:19 1212官方下载 www.StringTemplate. ... -
WCF-IErrorHandler
2011-10-11 16:30 1005使用 IErrorHandler 接口,我们可以更深入地 ... -
ADODB.Stream instead of Scripting.FileSystemObject.
2011-07-04 08:55 1216In a Silverlight 4 OOB App (eve ... -
Scripting.FileSystemObject对象的详细技巧指南
2011-07-03 23:39 1014Scripting.FileSystemObject对象的 ... -
Stream 和 byte[] 之间的转换
2011-07-02 16:52 1039/* - - - - - - - - - - - - - ... -
常用正则表达式
2011-06-15 20:17 764正则表达式用于字符 ... -
DynamicMethod 类
2011-05-11 22:51 1117public delegate String MyMetho ... -
一个通用的快速反射方法(A General Fast Method Invoker)
2011-04-13 22:01 1491普通反射方法 MethodInfo methodIn ... -
C#操作IIS(转)可以写一个工具自己配置网站
2011-03-24 21:08 2234using System; using System.Dir ...
相关推荐
最简单的用IHttpHandler实现url重写,vs2005
在本文中,我们首先讨论了aspnet_...然后,我们通过三个实例,图片防盗链、图片验证码、处理自定义后缀名请求,详细讲解了IHttpHandler的实现方法和使用过程。 最后,我向大家概要地介绍了IHttpHandlerFactory接口。
IHttpHandler概述,请述关于IHttpHandler的原理
asp.net服务端实现文件的上传处理以及下载处理,使用了IHttpHandler接口
【ASP.NET编程知识】asp.net继承IHttpHandler接口实现给网站图片添加水印功能实例.docx
可以使用作为验证码,不过要实现IRequestState接口
说明:HttpHandler是一个HTTP请求的真正处理中心。在HttpHandler容器中,ASP.NET Framework才调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理,真正地对客户端请求的服务器页面做出编译和...
这是一个简单的上传文件的例子,例子中主要是上传图片格式的文件,只要把检查文件格式的代码删除,就可以上传其他格式的文件了.
采用了一般处理程序(jquery+HttpHandler)实现数据查询、插入。分页控件采用SQL语句分页。
主要介绍了asp.net继承IHttpHandler接口实现给网站图片添加水印功能,实例分析了asp.net基于IHttpHandler接口实现网站图片水印功能的具体步骤与相关技巧,需要的朋友可以参考下
handler module factory的一个小demo
本篇介绍通用权限验证的实现代码思路,总共分为导入参数、解析XML、根据XML配置进行处理、返回结果。 代码架构图 一、 类介绍 1.SFWebPermission:实现IHttpModule接口,...9.SFPermission.xml:配置文件,格式上
public class Uploader : IHttpHandler { public void ProcessRequest (HttpContext hc) { foreach (string fileKey in hc.Request.Files) { HttpPostedFile file = hc.Request.Files[fileKey]; file.SaveAs...
利用HttpHandler创建自定义后缀Rss源 通过IhttpHandler实现图片验证码 使用HttpHandler实现图片防盗链
本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助。 效果图: 本文涉及到的知识点:1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序...
最后就是用组件实现重写(基本原理大多也是实现IHttpModule、IHttpHandler接口处理请求)。 如果自己处理请求,实现起来麻烦,特别是在大项目中,做好使用组件实现。网上有很多开源或免费的实现URL重写的组件,选择...
学习是使用asp.net已经有很长一段时间了,现在就来分析一下mvc的整过过程吧。个人计划写一个mvc系列的博文,仅从源代码的角度来分析mvc。在接触mvc时我们一定会经历路由,那么路由这东东是怎么搞出来的啊。...