在代码隐藏中的asp:image中显示来自数据表的图像

我有一个数据表,它从1行select语句的结果集(通过SQL Server 2008中的存储过程)填充,它包含一个Image类型列,我存储图像。

我在aspx页面上有一个asp:image控件,我想将图像设置为该数据表的相应字段,但我做的任何事情我都不能。 请告诉我如何从后面的代码中设置该数据表的asp:image到image列。

尝试数据URL方案 :

 " /> protected static string ReturnEncodedBase64UTF8(object rawImg) { string img = "data:image/gif;base64,{0}"; //change image type if need be byte[] toEncodeAsBytes = (byte[])rawImg; string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); return String.Format(img, returnValue); } 

您可以将放入,因此您可以将asp:imageImageUrl属性设置为"data:image/png;base64,xxx"

但是,我怀疑浏览器对此的支持是不稳定的,在IE9和firefox中运行良好,但我不确定旧浏览器是否支持这一点。

我建议的另一种方法是创建一个通用的处理程序ashx ,它读取数据库并返回一个图像。 您可以访问该网站了解如何操作: http : //www.dotnetperls.com/ashx ,然后您可以将ImageUrl属性设置为此处理程序地址。

使用ASP.Net从SQL Server数据库显示图像

aspx文件

  

cs文件

 protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["ImageID"] != null) { string strQuery = "select Name, ContentType, Data from tblFiles where id=@id"; SqlCommand cmd = new SqlCommand(strQuery); cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32 (Request.QueryString["ImageID"]); DataTable dt = GetData(cmd); if (dt != null) { Byte[] bytes = (Byte[])dt.Rows[0]["Data"]; Response.Buffer = true; Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = dt.Rows[0]["ContentType"].ToString(); Response.AddHeader("content-disposition", "attachment;filename=" + dt.Rows[0]["Name"].ToString()); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); } } } 

只需使用Convert.ToBase64String即可

  byte[] bytes = (byte[])dr["YourImageField"]; string b64img = Convert.ToBase64String(bytes); Image1.ImageUrl = "data:image/jpeg;base64," + b64img;