ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像

  数据库管理系统往往都提供二进制大对象的支持。当然,二进制对象字段不一定非要存储图像,它还可以存储媒体文件或长文本文件或其他二进制内容。

  下面以从数据库加载员工相片为例,展示一个HTTP处理程序的例子:

 
  
public class DbImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
// 从查询字串中获取员工ID
int id = - 1 ;
bool reaust = Int32.TryParse(ctx.Request.QueryString[ " id " ], out id);
// 如果未能从查询字符串中得到员工ID,则立即中断Http请求的处理
if ( ! result)
ctx.Response.End();

// 数据库连接字串
string connString = " ... " ;
string cmdText = " Select photo from employees where employeeid = @id " ;

// 从数据库中读取photo字段,以获取员工相片
byte [] img = null ;
SqlConnection conn
= new SqlConnection(connString);
using (conn)
{
SqlCommand cmd
= new SqlCommand(cmdText, conn);
cmd.Parameters.AddWithValue(
" @id " , id);
conn.Open();
img
= ( byte [])cmd.ExecuteScalar();
conn.Close();
}

if (img != null )
{
// 设置HTTP标头中的ContextType字段,表明body中的数据为图像类型
ctx.Response.ContextType = " image/jpeg " ;
// 输出图像到浏览器
ctx.Response.BinaryWrite(img);
}
}

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

  这段代码做了几点假设:首先,名为photo的字段存储的是图像数据,且以JPEG格式存储;其次,图像是通过预定义的连接字符串从固定的数据库表中获取;最后,调用该处理程序的URL要包含一个名为id的查询字符串参数。

  注意,这段代码在使用查询参数ID的值前尝试对它进行类型转换。通过验证ID参数中是否包含数据型数据,能显著降低受到外界攻击的风险。

  HttpResponse对象的BinaryWrite方法能够将字节数组写入输出流。

在web.config中注册

  HTTP处理程序必须在web.config文件中注册,并绑定到一个公共端点上:

 
  
< httpHandlers >
< add verb ="*" path ="dbimage.axd" type ="Core35.Components.dbImageHandler,Core35Lib" />
</ httpHandlers >

使用

  在浏览器中输入类似如下的URL:http://localhost:57023/core35/dbimage.axd?id=1,该URL的含义是在数据库中查询员工ID为1的员工相片。

  我们还可以将类似URL绑定到Web控件上Image控件上实现动态访问图像。

转载于:https://www.cnblogs.com/free722/archive/2011/04/29/2033128.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值