博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十一节 6HttpHandler案例
阅读量:6325 次
发布时间:2019-06-22

本文共 6012 字,大约阅读时间需要 20 分钟。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>        

  

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;/* HttpHandler1 * HttpHandler是对请求的响应,可以输出普通的html内容,也可以输出图片,也可以输出一个文件(下载) * 输出一幅动态创建的图片(能看懂就可以) *  * 案例1: 图片中显示的访问者信息 * 案例2: 填入朋友的姓名就能生成恶搞的图片链接 * 网上看到的注册,登陆时候的验证码也是动态生成的图片,55.la也是这样实现的原理 * *  * HttpHandler实现文件下载 * 如果HttpHandler输出的是html,txt, jpeg等类型的信息,那么浏览器会直接显示,如果希望弹出保存对话框,则需要添加 * Header: string encodeFileName = HttpUtility.UrlEncode("过滤语.txt");  * Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"",encodeFileName)); * 其中filename后为编码后的文件名,filename段为建议的保存文件名 *  * 动态输出用处,不用再把资原保存到磁盘上再输出(不会有文件重名的问题,文件不生成在服务器端) * 案例: 点周链接弹出图片下载对话框 *  * 练习: 用NPOI动态生成一个Execel表然后弹出对话框让用户下载,文件名是"用户列表.xls" *  * 练习: 从数据库用户表导出数据到Excel文件,让用户下载, mdf放到App_Data下,asp.net不用那段设置DataDirectory的代码,用DataReader的方式读取数据 *  * 练习: 用户表增加一个级别字段,只有登陆用户才能下载images下的图片文件(session中标识是否登录),如果用户没有登录则首先重定向到登录界面让用户登录,用户 * 登录成功则跳转到下载列表页面,下载链接固定写好即可,如果登妹用户是普通用户则在图片左下解加上"免费用户试用"的字样 * 练习: 给上面的程序加上登录验证码 *  */public partial class _Default : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        string dataDir = AppDomain.CurrentDomain.BaseDirectory;        if (dataDir.EndsWith(@"\bin\Debug\")            || dataDir.EndsWith(@"\bin\Release\"))        {            dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;            AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);        }    }    /*             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MyProjects\C#net传智播客\第十一节asp.net中级\导出Excel\App_Data\Database.mdf;Integrated Security=True;User Instance=True"))        {            conn.Open();            using (SqlCommand cmd = conn.CreateCommand())             {                cmd.CommandText = "select * FROM T_User";                using(SqlDataReader reader = cmd.ExecuteReader())                {                    HSSFRow _row = sheet.CreateRow(0);                    _row.CreateCell(0, HSSFCell.CELL_TYPE_STRING).SetCellValue("ID");                    _row.CreateCell(1, HSSFCell.CELL_TYPE_STRING).SetCellValue("用户名");                    _row.CreateCell(2, HSSFCell.CELL_TYPE_STRING).SetCellValue("性别");                    int rownum = 1;                    while (reader.Read())                     {                        Int64 id = reader.GetInt64(reader.GetOrdinal("id"));                        string name = reader.GetString(reader.GetOrdinal("name"));                        string sex = reader.GetString(reader.GetOrdinal("sex"));                        HSSFRow row = sheet.CreateRow(rownum);                        row.CreateCell(0, HSSFCell.CELL_TYPE_STRING).SetCellValue(id);                        row.CreateCell(1, HSSFCell.CELL_TYPE_STRING).SetCellValue(name);                        row.CreateCell(2, HSSFCell.CELL_TYPE_STRING).SetCellValue(sex);                        rownum++;                        //context.Response.Write("id:"+id+", name:"+name+", sex="+sex+"
"); } } } } */}

  

<%@ WebHandler Language="C#" Class="HttpHandler1" %>using System;using System.Web;public class HttpHandler1 : IHttpHandler {        public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "image/JPEG";        //context.Response.Write("Hello World");        using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(300, 300))         {            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))             {                g.DrawString("IP:" + context.Request.UserHostAddress, new System.Drawing.Font("宋体", 30), System.Drawing.Brushes.Red, 0, 0);                g.DrawString("操作系统:" + context.Request.Browser.Platform, new System.Drawing.Font("宋体", 30), System.Drawing.Brushes.Red, 0, 100);                g.DrawString("浏览器:" + context.Request.Browser.Type, new System.Drawing.Font("宋体", 30), System.Drawing.Brushes.Red, 0, 150);            }            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);        }    }     public bool IsReusable {        get {            return false;        }    }}

  

<%@ WebHandler Language="C#" Class="HttpHandler2" Debug=true %>using System;using System.Web;public class HttpHandler2 : IHttpHandler {        public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "image/JPEG";        string name = context.Request["name"];        string imgfile = HttpContext.Current.Server.MapPath("3.jpg");        using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(imgfile))         {            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))             {                g.DrawString(name, new System.Drawing.Font("宋体",30), System.Drawing.Brushes.Red, 50,50);            }            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);        }            }     public bool IsReusable {        get {            return false;        }    }}

  

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xiazan.aspx.cs" Inherits="xiazan" %>          图片1   txt   图片3   图片4

  

<%@ WebHandler Language="C#" Class="xiazan" %>using System;using System.Web;public class xiazan : IHttpHandler {        public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "image/JPEG";        //context.Response.Write("Hello World");        //这里如果用中文文件名的话,有可能出现乱码        //context.Response.AddHeader("Content-Disposition", "attachment;filename=呵呵.jpg");        context.Response.AddHeader("Content-Disposition", HttpUtility.UrlEncode("attachment;filename=哥哥哥哥.jpg"));                context.Response.WriteFile("3.jpg");    }     public bool IsReusable {        get {            return false;        }    }}

  

转载地址:http://ojmaa.baihongyu.com/

你可能感兴趣的文章
劈荆斩棘:Gitlab 部署 CI 持续集成
查看>>
Mongodb后台daemon方式启动
查看>>
cp显示进度条
查看>>
Hadoop RPC
查看>>
SuperSpider——打造功能强大的爬虫利器
查看>>
MySql状态查看方法 MySql如何查看连接数和状态?
查看>>
memcached 安装
查看>>
Python与Redis的连接教程
查看>>
MySQL的DDL语句、DML语句与DCL语句
查看>>
java 从String中匹配数字,并提取数字
查看>>
转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
查看>>
Linux traceroute
查看>>
特殊权限:SUID,SGID,Sticky
查看>>
你真的了解UINavigationController吗?
查看>>
Redis
查看>>
ios开发怎么获取输入的日期得到星期
查看>>
ionic build android 报错分析
查看>>
configure 编写1
查看>>
2016MBA排名
查看>>
[LeetCode] Fizz Buzz 嘶嘶嗡嗡
查看>>