热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> .Net编程>>正文内容

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

发布时间:2009年11月19日点击数: 未知

 在数据库中存取并显示到页面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;

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作