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

  下面以从数据库加载员工相片为例,展示一个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

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

  1. ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定

    从总体上讲,ASP.NET数据绑定模型可以分为三部分:数据绑定表达.传统数据源.数据源控件. 可用的数据源 在ASP.NET中,任何一个暴露IEnumerable接口的对象,都是有效的可绑定数据源.I ...

  2. ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式

    简单数据绑定 数据绑定表达式是由<%...%>包裹的可执行代码,以#号为前缀.它可以通过DataBoundLiteralControl类的实例以编程方式加以管理. 数据绑定表达式通常从数据 ...

  3. ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建

    ASP.NET并没有包含对扩展程序的具体实现.然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl.我们可通过该类创建自己的扩展程序.但并不建议这样做,因为 ...

  4. 【C++】黑马程序员-C++核心编程学习笔记

    前言 根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode. 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C ...

  5. 转 windows核心编程 学习笔记 目录

    windows核心编程--SEH(结构异常处理) SEH 的工作原理.         Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...

  6. 自己的微信小程序学习笔记【3】——第三方UI库Lin-Ui的加载及使用

    其他微信小程序的学习笔记 自己的微信小程序学习笔记[1]--小程序开发工具的使用及项目文件说明 自己的微信小程序学习笔记[2]--从零开始新建项目 文章目录 其他微信小程序的学习笔记 前言 一.Lin ...

  7. pytorch学习笔记(6):GPU和如何保存加载模型

    参考文档:https://mp.weixin.qq.com/s/kmed_E4MaDwN-oIqDh8-tg 上篇文章我们完成了一个 vgg 网络的实现,那么现在已经掌握了一些基础的网络结构的实现,距 ...

  8. OpenLayers学习笔记中级篇(一、各种地图的加载)

    学习了前面的初级篇,相信大家对OplenLayers已经有了一个初步的认识,下面我们再继续深入学习OpenLayers的相关功能! 我们这节主要是加载各种各样的地图,包括在线服务的地图,比如天地图.高 ...

  9. Python核心编程学习笔记(一)

    1.把一个字符串赋值给变量str.先用print来显示变量的内容,然后用变量名称来显示: >>>str = 'Hello World!' >>>print str ...

  10. windows核心编程学习笔记(六)动态链接库

    动态链接库有很多优点: •扩展了应用程序的特性 •可以用许多种编程语言来编写 •简化了软件项目的管理 •有助于节省内存 •有助于资源的共享 •有助于应用程序的本地化 •有助于解决平台差异 •可以用于一 ...

最新文章

  1. eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库
  2. spring boot项目之mybatis注解方式的使用
  3. 深度学习基础知识介绍
  4. 假如购买的期房不小心烂尾了,那银行贷款是否可以不还了?
  5. 用Java实现图片验证码功能
  6. electron 打包后 __static_electron开发客户端注意事项(兼开源个人知识管理工具“想学吗”)...
  7. maven详解之仓库
  8. centos usb转网口_CentOS5.6系统中安装并使用USB无线网卡(配置成功) 转
  9. Linux学习笔记-配置SAMBA服务
  10. 【图论】【启发式搜索】【二分查找】[POJ 3897]Maze Stretching
  11. Unity Application Block 1.0系列文章
  12. C11头文件threads.h声明了创建和管理线程,信号,条件变量的函数
  13. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 09课
  14. [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
  15. Ubuntu16.04 CPU压力测试
  16. 2020算法设计与分析 官方考前模拟卷 参考答案
  17. 微信发红包测试点整理
  18. NetDevOps的理解与学习路线
  19. vscode在html看到图片的插件_自从用了这款PPT插件,我才知道什么叫做高效办公!...
  20. FilterConfig.RegisterGlobalFilters 全局过滤器的用法

热门文章

  1. epoch、 iteration和batchsize的区别
  2. pygame系列文章
  3. 机器学习最简单算法——KNN算法(K-Nearest Neighbor)
  4. 机器人码垛搬运编程程序_一条指令搞定机器人搬运程序
  5. 【Django 2021年最新版教程23】2个日期相减 计算天数 xxxx-xx-xx格式
  6. Hyperledger fabric通道(Channel)的新建、管理、节点如何加入channel
  7. Docker教程小白实操入门(7)--基于Commit定制镜像
  8. FISCO BCOS Webase front 智能合约 参数不合适
  9. 微信小程序云开发教程-微信小程序的JS基础-事件响应与视图层数据获取
  10. JavaWeb学习(二)Maven