【转】HttpHandler实现图片呈现

ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取
在ASP.NET Person Web Site Starter Kits中,图片的是以二进制的形式存放在数据库里,微软提供的读取该图片的方式是通过handler.ashx来实现的.
首先你所看到的对图片的引用都是类似如下
<img src="Handler.ashx?AlbumID=<%# Eval("AlbumID") %>
的形式,也就是你所看到的每一个图片都由Handler.ashx动态生成,所以在你保存你所看到的"图片"时,它的命名都是Handler.ashx.
使用handler.ashx而不是handler.aspx来引用图片并不是一定的,换句话说,你可以将该文件改为handler.aspx并没有本质的区别,不过根据微软的文档,使用*.ashx作为扩展名的文档比*.aspx的文档性能高,因为它减少了控件树的生成。

这是handler.ashx代码:


<%@ WebHandler Language="C#" Class="MyHandle" %> 

using System; 
using System.Web; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.IO; 
using System.Web.Caching; 
using System.Data; 

public class MyHandle : IHttpHandler 

public void ProcessRequest (HttpContext context) 
//从数据库中取 
MemoryStream ms = JSZ.SQLServerDAL.TestDAL.GetImage(1); 
DataTable dt 
= JSZ.SQLServerDAL.TestDAL.GetTable(1); 
Byte[] image 
= (Byte[])dt.Rows[0]["Photo"]; 
MemoryStream ms 
= new MemoryStream(image, 0, image.Length); 
if (ms != null

//取得图像MemoryStream大小 
int bufferSize = (int)ms.Length; 
//建立 buffer 
byte[] buffer = new byte[bufferSize]; 
//调用MemoryStream.Read,自MemoryStream 读取至buffer,并返回count 
int countSize = ms.Read(buffer, 0, bufferSize); 
//返回图像buffer 
context.Response.OutputStream.Write(buffer, 0, countSize); 
}
 
}
 

public bool IsReusable 
get 
return false
}
 
}
 
}




posted on 2008-07-10 23:44  王丹小筑  阅读(334)  评论(0)    收藏  举报

导航