ASP.NET页面引用非文件图片

关键词: 页面 标记 图片 服务器

W E B页面引用图片只有通过使用H T M L标记一种方式,该标记指向一个URL,为了能够在WEB页面显示,图片必须是可以通过一个URL来标识的,而且它的比特位就包含在针对该U R L的W E B服务器所返回的输出流中。在许多情况下,URL指向一个诸如GIF或JPEG的静态文件资源,在这种情况下,WEB读取自身请求并在不调用外部组件的情况下为这些请求服务。

从浏览器的角度来看,WEB页面只不过是一长串需要序列化处理的字符串。浏览器显示一些字符并根据特殊的规则来解释另外一些字符,例如。当发现一个标记时,浏览器便知道自己必须打开另一个下载通道并请求所指定的URL。在浏览器看来,URL的类型和协议并不重要,重要的是所期望的输出必须与某种给定的格式—M I M E类型相匹配。

  浏览器请求图片的URL,并根据所期望的M I M E类型来处理返回的输出结果。如果输出字节能够形成正确的图片,则通过标记中设置的属性来显示图片,否则,将出现一个错误并显示一个标准的位图。

1 设置内容类型

  所有到达浏览器的响应数据包都包含一个Content-Type头信息,它提供了关于类型、格式以及数据的信息。浏览器通过查看该头信息来决定如何处理数据。以下代码段说明了IIS(互联网信息服务)针对某个请求一个JPEG图片的浏览器响应。

  在ASP.NET中,HttpResponse对象负责设置响应数据包中的确Content-Type头信息。在默认情况下,HttpResponse对象的ContentType属性被设置为test/html,该属性可接受的值都是HTTP MIME类型。为了能够成功下载,ContentType必须在页面中设置一次,并且必须在发送数据到输出流之前设置

2 从BLOG字段读取图片

  所有具有一定知名度的D B M S的都支持二进制大对象 (BLOG) , 这是用数据库保存图片的基础, 在MS SQL SERVER中, Image类型是存储图片的最佳选择。因为多数时候用户不会对B L O G对象直接修改,所以A S P.NET的数据阅读器是从B L O G字段读取信息的最有用的工具。

  要使用A D O.N E T从B L O G字段读取图片,用户需要对数据库B L O G列执行一个SELECT语句并使用ExecuteScalar或数据阅读器来捕获结果,然后将它保存到一个字节数组,再将该数组通过一个到响应流的二进制写入操作来发送到客户端。以下代码说明了如何进行:

  在以上代码中,我们假定数据库test中employee表的photo列包含了图片位,而且是JPEG格式。注意,在开始之前我们尝试将id查询参数的值转换为一个整数值,这个简单的检查通过核实将要用作ID的内容是不是一个真正的数据ID,可以减少恶意用户的表面攻击。HttpResponse对象的BinaryWrite方法将一个字节数组写入到输出流。

3 写入到输出流

  上述代码只是呈现一张图片,如果一个页面中要同时显示若干张图片怎么办?

  可以先创建一个image.aspx文件,该文件负责呈现一张图片, 然后在客户端图片呈现的ASPX文件中将标记的src设置为指向image.aspx文件的链接,并在该链接中传递一个参数 (通常是主码值) 。以下代码示例了一个简单的页面,它请求一个A S P.N E T页面的图片。

4 优化数据库查询

  在上述模式中,绑定到标记的.aspx资源会生成一个针对数据库的额外调用,实际上,用户是进行一次调用来获取所有基于文本的信息,再进行一次调用来填充每个绑定到W E B页的图片。

  如果用户认为这种模式不合适,可以考虑以下替代方式来优化数据库访问。首先可以在一个临时目录中创建图片的一个副本,然后在开始数据库查询之前查找本地文件,尤其是对于大图片,可以节省带宽。此外,用户还可以修改调用页面的源代码,使它指向一个现有的图片文件而不是指向一个服务器端的页面,这样就可以获得更快的速度,因为IIS可以在不提交请求到期ASP.NET的情况下解析对页面的调用。

  如果图片大小和数量允许的话,第二种优化策略是使用缓存。这种方式要求查询并临时缓存所有BLOG字段,缓存时间长度只要能够满足针对图片的后续访问即可,为了确保对象在内存中保存的时间不至于过长,可以将它保存到Cache中,并定义一个短期的过期策略。

  总之,整个使用非文件图片的过程就是先将图片转换成字节流保存到数据库的BLOG列,当需要在页面中呈现时,将图片字节读取出来保存到一个字节数组中,再将数组输出到客户端。

摘要:随着动态WEB技术和数据库技术的日益成熟, 很多情况下, 我们的图片并不保存为静态文件, 而是保存在数据库中。本文以IIS、ASP.NET (C#) 和MS SQL SERVER为例, 详细论述WEB页面引用非文件图片的方法。

关键词:ASP.NET,WEB,数据库,SQL SERVER

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:ASP.NET快速构建企业站点 下一篇:.net面试题紧急