数据库存储图像及使用Image控件显示

简介: 在数据库中存取并显示到页面Image控件的功能。原来认为并不复杂,但是实际中却遇到了一些问题。 首先来看看保存图片: 图片在数据库中使用二进制方式存储,所以要把图片转化为二进制流文件在存储到数据库中,代码如下:     private void Save()     {         MyImage img = new MyImage();         img.

在数据库中存取并显示到页面Image控件的功能。原来认为并不复杂,但是实际中却遇到了一些问题。

首先来看看保存图片:

图片在数据库中使用二进制方式存储,所以要把图片转化为二进制流文件在存储到数据库中,代码如下:

    private void Save()

    {

        MyImage img = new MyImage();

        img.Img = System.Drawing.Image.FromStream(this.FileUpload1.PostedFile.InputStream);

        System.IO.MemoryStream ms = new MemoryStream();

        img.Img.Save(ms, img.Img.RawFormat);

       

        SqlParameter[] paras = new SqlParameter[1];

        paras[0] = new SqlParameter("@img", SqlDbType.Image, 2147483647);

        paras[0].Value = ms.ToArray();

        sql.DBOption("Insert Into T_img (img) Values (@img)",paras);

}

再来看看读取文件:

    SqlDataAdapter adapter = new SqlDataAdapter("Select * From T_img Where imgID = " + Request.QueryString["imgID"].ToString(), sql.SqlConn);

    DataSet Ds = new DataSet();

    adapter.Fill(Ds);

    if (Ds.Tables[0].Rows.Count > 0)

    {

        img.ImgID = Convert.ToInt32(Ds.Tables[0].Rows[0]["imgID"]);

        Byte[] bytes = (Byte[])Ds.Tables[0].Rows[0]["img"];

        Response.BinaryWrite(bytes);

    }

最后要将其在Image控件中显示:

在网上看了很多资料都是使用Response.BinaryWrite(bytes),但是这只能重写页面,造成页面上只显示图片,但是在实际的项目中我们有可能是要显示在某一个特定的位置,或者说在System.Web.UI.WebControls.Image控件中显示。一开始我有一个误区,想将System.Drawing.Image对象放入WebControls.Image控件中,实际上是不能直接转换的。网上很多人提出了建立一个页面只显示图像,然后把这个页面的地址传给Image1.ImageUrl。这样做显然可以成功,但是有一点我不太满意,有一个多余的页面,此时可以使用HttpHandler来解决。

Web.config文件中加入一个HttpHandler

<system.web>

<httpHandlers>

<addverb="*"path="imgPage1.aspx"type="imgPageHandler"/>

</httpHandlers>

</system.web>

App_Code里加入一个imgPageHandler类型,并使他继承自IHttpHandler,并重写IsReusable属性和ProcessRequest方法,代码如下:

    public bool IsReusable

     {

         get { return false; }

     }

 

     public void ProcessRequest(HttpContext context)

     {

         MyImage img = new MyImage();

         try

         {

             sql.DBConnect();

             SqlDataAdapter adapter = new SqlDataAdapter("Select * From T_img Where imgID = " + context.Request.QueryString["imgID"].ToString(), sql.SqlConn);

             DataSet Ds = new DataSet();

             adapter.Fill(Ds);

             if (Ds.Tables[0].Rows.Count > 0)

             {

                 img.ImgID = Convert.ToInt32(Ds.Tables[0].Rows[0]["imgID"]);

                 Byte[] bytes = (Byte[])Ds.Tables[0].Rows[0]["img"];

                 context.Response.BinaryWrite(bytes);

             }

         }

         catch (Exception ex)

         {

             throw ex;

         }

         finally

         {

             sql.DBClose();

         }

     }

在要显示图像的页面中将虚拟出的页面地址给Image1.ImageUrl

       this.Image1.ImageUrl = "imgPage1.aspx?imgID=" + this.TextBox1.Text;

目录
打赏
0
0
0
0
16
分享
相关文章
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
284 0
PolarDB开源数据库进阶课3 共享存储在线扩容
本文继续探讨穷鬼玩PolarDB RAC一写多读集群系列,介绍如何在线扩容共享存储。实验环境依赖《在Docker容器中用loop设备模拟共享存储》搭建。主要步骤包括:1) 扩容虚拟磁盘;2) 刷新loop设备容量;3) 使用PFS工具进行文件系统扩容;4) 更新数据库实例以识别新空间。通过这些步骤,成功将共享存储从20GB扩容至30GB,并确保所有节点都能使用新的存储空间。
17 1
时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍
化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累,精准聚焦行业痛点,并携手 TDengine 提供高效解决方案。
22 0
列式存储数据库与超市的关系?
列式存储数据库是一种高效的数据管理方式,类似于超市将相似商品集中摆放。它将相同类型的数据(如年龄、价格)归类存储,便于快速查询和压缩,广泛应用于市场分析、财务报告和健康数据分析等领域。知名产品包括HBase、ClickHouse、Druid和Apache Cassandra等,适合处理大规模数据和实时分析任务。
51 4
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
113 2
支持配置审计日志的存储数据库
审计日志作为企业监管平台的重要依据,同时也是“等保三级”认证的必要考察项之一。Dataphin V4.3版本支持设置平台日志的存储数据源,帮助用户快速获取审计日志,同时介绍了不同部署模式的Dataphin如何查看审计日志的方法。
182 5
可以存储文件的数据库有哪些?
可以存储文件的数据库有哪些?
418 6
可以存储文件的数据库有哪些?
可以存储文件的数据库有哪些?
942 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等