我有一个数据表,它是从 1 行选择语句的结果集中(通过 SQL Server 2008 中的存储过程)填充的,它包含一个Image
类型化的列,我在其中存储图像。
我asp:image
在 aspx 页面上有一个控件,我想将图像设置为该数据表的相应字段,但我做的任何事情都做不到。请告诉我如何从后面的代码asp:image
中设置该数据表的to image 列。
我有一个数据表,它是从 1 行选择语句的结果集中(通过 SQL Server 2008 中的存储过程)填充的,它包含一个Image
类型化的列,我在其中存储图像。
我asp:image
在 aspx 页面上有一个控件,我想将图像设置为该数据表的相应字段,但我做的任何事情都做不到。请告诉我如何从后面的代码asp:image
中设置该数据表的to image 列。
你可以放<img src="data:image/png;base64,<BASE64 STRING>" />
,所以你可以将asp:image
'ImageUrl
属性设置为"data:image/png;base64,xxx"
.
但是,我怀疑浏览器对此的支持参差不齐,在 IE9 和 firefox 中运行良好,但我不确定旧浏览器是否支持此功能。
不过,我推荐的另一种方法是创建一个通用处理程序ashx
,它读取数据库并返回图像。您可以查看此网站以了解如何操作:http: //www.dotnetperls.com/ashx,然后将ImageUrl
属性设置为此处理程序地址。
使用 ASP.Net 显示来自 SQL Server 数据库的图像
.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();
}
}
}
尝试数据 URL 方案:
<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);
}
只需使用 Convert.ToBase64String
byte[] bytes = (byte[])dr["YourImageField"];
string b64img = Convert.ToBase64String(bytes);
Image1.ImageUrl = "data:image/jpeg;base64," + b64img;