我使用MemoryStream
在SQL Server中保存了图像。
现在,我想从SQL Server读取所有图像并在<a href="this is eath of images" >
for (i = 0; i <= dt.Rows.Count ; i++)
{
Byte[] img = (Byte[])(reader["image"]);
MemoryStream ms = new MemoryStream(img);
BinaryWriter imgforshow = new BinaryWriter(ms);
ms.Write(img, 0, img.Length);
div1.InnerHtml = div1.InnerHtml + "<a href='"+ imgforshow +"' runat=server data- lightbox=roadtrip title=''>";
div1.InnerHtml = div1.InnerHtml + "<img src='"+ imgforshow +"' width=100 height=140></a> ";
}
如何在这一行中显示图像?
div1.InnerHtml = div1.InnerHtml + "<a href='"+ imgforshow +"'......
div1.InnerHtml = div1.InnerHtml + "<img src='"+ imgforshow +"'.......
答案 0 :(得分:1)
我建议编写一个回写图像的图像处理程序。你可以使用这样的东西:
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["id"];
byte[] img = GetImage(id);
context.Response.ContentType = "image/jpeg"; // change accordingly
context.Response.BinaryWrite(img);
context.Response.Flush();
context.Response.Close();
}
请注意,根据您的图片类型,您需要更改回复的内容类型。 GetImage
将返回具有指定id
的图像的字节数组。您无需将其传递给MemoryStream。
您的SQL查询看起来像这样:
SELECT image FROM images WHERE id = @id
try
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = new SqlCommand(connection);
command.CommandText = sqlQuery;
command.Parameters.Add("id", id);
command.ExecuteNonQuery();
connection.Close();
}
catch(Exception e)
{
// do something with the exception
}
还有另一个选项允许您在页面中一次嵌入所有图像,但它涉及使用数据Uris,这可能会减慢页面的加载速度。首先,您必须将数据库中的图像作为字节数组,然后对字节数组进行base64编码。
byte[] img = GetImage(id);
string imageSource = "<img src=\"data:image/jpeg;base64," + Convert.ToBase64String(img) + " />";
不建议用于较大的图像,因为在显示任何图像之前,页面将等待所有图像下载。您的用户可能会在感知的漫长等待时间内感到不安。它可以使用较小的图像。只关注你如何为图像服务。如果它们是几兆字节,我就不会使用这种方法。同样,需要根据图像类型调整mime类型。
答案 1 :(得分:0)
使用服务器图像控制:
<asp:Image runat="server" ID="img1" ImageUrl="getimage.ashx?id=1" />
<asp:Image runat="server" ID="img1" ImageUrl="getimage.ashx?id=2" />
<asp:Image runat="server" ID="img1" ImageUrl="getimage.ashx?id=3" />
AND Inside Handler:
string id = context.Request.QueryString["id"];
DataRow dr = GetImageById(id);
Byte[] myImg = (Byte[])dr["Image"];
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(myImg);
context.Response.Flush();
context.Response.Close();