ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像
数据库管理系统往往都提供二进制大对象的支持。当然,二进制对象字段不一定非要存储图像,它还可以存储媒体文件或长文本文件或其他二进制内容。
下面以从数据库加载员工相片为例,展示一个HTTP处理程序的例子:
{
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文件中注册,并绑定到一个公共端点上:
<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处理程序的编写之从数据库加载图像相关推荐
- ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定
从总体上讲,ASP.NET数据绑定模型可以分为三部分:数据绑定表达.传统数据源.数据源控件. 可用的数据源 在ASP.NET中,任何一个暴露IEnumerable接口的对象,都是有效的可绑定数据源.I ...
- ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式
简单数据绑定 数据绑定表达式是由<%...%>包裹的可执行代码,以#号为前缀.它可以通过DataBoundLiteralControl类的实例以编程方式加以管理. 数据绑定表达式通常从数据 ...
- ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建
ASP.NET并没有包含对扩展程序的具体实现.然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl.我们可通过该类创建自己的扩展程序.但并不建议这样做,因为 ...
- 【C++】黑马程序员-C++核心编程学习笔记
前言 根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode. 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C ...
- 转 windows核心编程 学习笔记 目录
windows核心编程--SEH(结构异常处理) SEH 的工作原理. Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...
- 自己的微信小程序学习笔记【3】——第三方UI库Lin-Ui的加载及使用
其他微信小程序的学习笔记 自己的微信小程序学习笔记[1]--小程序开发工具的使用及项目文件说明 自己的微信小程序学习笔记[2]--从零开始新建项目 文章目录 其他微信小程序的学习笔记 前言 一.Lin ...
- pytorch学习笔记(6):GPU和如何保存加载模型
参考文档:https://mp.weixin.qq.com/s/kmed_E4MaDwN-oIqDh8-tg 上篇文章我们完成了一个 vgg 网络的实现,那么现在已经掌握了一些基础的网络结构的实现,距 ...
- OpenLayers学习笔记中级篇(一、各种地图的加载)
学习了前面的初级篇,相信大家对OplenLayers已经有了一个初步的认识,下面我们再继续深入学习OpenLayers的相关功能! 我们这节主要是加载各种各样的地图,包括在线服务的地图,比如天地图.高 ...
- Python核心编程学习笔记(一)
1.把一个字符串赋值给变量str.先用print来显示变量的内容,然后用变量名称来显示: >>>str = 'Hello World!' >>>print str ...
- windows核心编程学习笔记(六)动态链接库
动态链接库有很多优点: •扩展了应用程序的特性 •可以用许多种编程语言来编写 •简化了软件项目的管理 •有助于节省内存 •有助于资源的共享 •有助于应用程序的本地化 •有助于解决平台差异 •可以用于一 ...
最新文章
- eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库
- spring boot项目之mybatis注解方式的使用
- 深度学习基础知识介绍
- 假如购买的期房不小心烂尾了,那银行贷款是否可以不还了?
- 用Java实现图片验证码功能
- electron 打包后 __static_electron开发客户端注意事项(兼开源个人知识管理工具“想学吗”)...
- maven详解之仓库
- centos usb转网口_CentOS5.6系统中安装并使用USB无线网卡(配置成功) 转
- Linux学习笔记-配置SAMBA服务
- 【图论】【启发式搜索】【二分查找】[POJ 3897]Maze Stretching
- Unity Application Block 1.0系列文章
- C11头文件threads.h声明了创建和管理线程,信号,条件变量的函数
- 【个人笔记】OpenCV4 C++ 图像处理与视频分析 09课
- [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- Ubuntu16.04 CPU压力测试
- 2020算法设计与分析 官方考前模拟卷 参考答案
- 微信发红包测试点整理
- NetDevOps的理解与学习路线
- vscode在html看到图片的插件_自从用了这款PPT插件,我才知道什么叫做高效办公!...
- FilterConfig.RegisterGlobalFilters 全局过滤器的用法
热门文章
- epoch、 iteration和batchsize的区别
- pygame系列文章
- 机器学习最简单算法——KNN算法(K-Nearest Neighbor)
- 机器人码垛搬运编程程序_一条指令搞定机器人搬运程序
- 【Django 2021年最新版教程23】2个日期相减 计算天数 xxxx-xx-xx格式
- Hyperledger fabric通道(Channel)的新建、管理、节点如何加入channel
- Docker教程小白实操入门(7)--基于Commit定制镜像
- FISCO BCOS Webase front 智能合约 参数不合适
- 微信小程序云开发教程-微信小程序的JS基础-事件响应与视图层数据获取
- JavaWeb学习(二)Maven