文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像

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

时间:2011-04-29  来源:辛勤的代码工

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

  下面以从数据库加载员工相片为例,展示一个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控件上实现动态访问图像。

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载