开始学习ASP.net------如何利用ASP.net动态输出图片
2011-05-14 23:06
645 查看
1.引言
做ASP.net开发大部分时间是在动态输出html文件,通过<img src=xxx.jpg />连接静态的图片文件。所做的编程工作也大部分是在aspx文件里添加代码。其实所作的就是完善Page类得派生类。因为所有的aspx对应的类都是继承自Page。而Page类本身负责完成整个页面生存周期的管理工作。但有时候,输出并不需要复杂的html页面,而是简单的图片,如验证码就是个非常典型的例子。2请求执行流程与通用处理程序
HttpApplication根据web.cofig中处理程序的映射关系,根据url找到对应的实现了IHttpHandler的类,并实例化后,调用类的ProcessRequest()方法,完成渲染输出。由于ASP.netWeb程序的大部分工作是输出html,所以微软已经设计好了一个实现了IHttpHandler接口的Page类来处理此项任务。而对于其他的输出,如图片,压缩文件,纯文本,xls文件等等,微软没有单独提供处理程序,而是通过提供一种叫做“通用处理程序”的ashx来完成,微软做的是已经把ashx文件映射工作处理好了,我们只需要完成IHttpHandler的接口函数就可以了。3输出图片的步骤
在VS2010中,右键网站项目,选择添加新项-->一般处理程序,会增加一个.ashx文件,内容如下:<%@ WebHandler Language="C#" Class="Handler" %> using System; using System.Web; public class Handler : IHttpHandler { private HttpResponse Response; public void ProcessRequest (HttpContext context) { context.Response.ContentType="text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } }
可以看到,代码中定义了一个Handler类,实现了IHttpHandler接口。我们需要做的就是完善ProcessRequest这个接口函数。下面代码输出一个简单的矩形图像。
<%@ WebHandler Language="C#" Class="Handler" %> using System; using System.Web; public class Handler : IHttpHandler { private HttpResponse Response; public void ProcessRequest (HttpContext context) { context.Response.ContentType = "image/jpeg"; System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(100, 100); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap); //绘制 g.Clear(System.Drawing.Color.Black); g.DrawRectangle(System.Drawing.Pens.Red, 0, 0, 50, 50); g.Dispose(); bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); bitmap.Dispose(); } public bool IsReusable { get { return false; } } }
如果需要在其他html文档中显示动态生成的图片,那么只要在html文档中加入如下代码即可:
<img src="xxx.ashx" />
4 输出其他类型
利用ashx(active server handler extend),我们可以实现输出任何http协议规范中的文档类型。当然也包括html,如果你不想使用复杂的aspx,完全可以自己利用ashx完成简单html的输出任务。不过也就失去了Page类的生命周期管理的便利性,还是看具体要求来决定是否使用Page类(aspx)。相关文章推荐
- 利用XSLT+JavaScript+Asp.net动态添加广告图片
- asp.net上动态地输出图片的代码
- asp.net如何给每张图片动态添加水印方法(一)
- vs2003 asp.net中直接输出wml,并利用C#做动态页面的控制,不使用微软的移动控件
- asp.net如何给每张图片动态添加水印方法(二)
- asp.net动态输出透明gif图片
- asp.net动态输出透明gif图片
- asp.net 动态输出透明gif图片
- ASP.NET MVC 利用IRouteHandler, IHttpHandler实现图片防盗链
- 关于在struts2中利用jquery中如何动态从数据库中加载图片并显示
- 利用Asp.net 动态创建DataList[转]
- 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件
- ASP.NET如何获取远程图片
- ASP.NET学习笔记(4)——上传图片
- Asp.net缓存动态图片
- ASP.NET 2.0 - 如何于网页上新增包括图片在内的数据至数据库
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 如何动态创建asp.net 用户控件
- 利用UrlRewrite,asp.net动态生成htm页面(补充说明2)