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

时间:2012-04-13 15:03:07

标签: c# asp.net sql-server datatable code-behind

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

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

4 个答案:

答案 0 :(得分:2)

您可以放置​​<img src="data:image/png;base64,<BASE64 STRING>" />,因此您需要将asp:image的{​​{1}}属性设置为ImageUrl

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

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

答案 1 :(得分:2)

Display Images from SQL Server Database using ASP.Net

aspx文件

<asp:image ID="Image1" runat="server" ImageUrl ="ImageCSharp.aspx?ImageID=1"/>

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();
        }
    }
}

答案 2 :(得分:2)

试试Data URL scheme

<img src="<%# ReturnEncodedBase64UTF8(Eval("ColumnA")) %>" />

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);
}

答案 3 :(得分:0)

只需使用Convert.ToBase64String

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