我的图像存储在Sql Server数据库中,我想在网页上显示它们。
问题是,ASP.NET中的Image控件具有ImageUrl属性,该属性将路径的值作为包含图像文件的文件夹的值。但我从数据库表中绘制我的图像,并且不想将图像保存到磁盘,因此我可以提供路径。我宁愿将图像直接流式传输到页面。
我很难描绘这个(双关语意图),并怀疑这将要完成的唯一方法是将图像临时保存到某个位置,然后将其修改为图像控件。但也许我错过了什么?
编辑添加:
这是一个会计系统,需要提供差旅费用以便报销。我们正在考虑允许用户(我们有30,000个用户)扫描他们的收据并将其与他们的报销请求相关联地存储。我想,在文件系统中存储它是一种方法,它使用索引存储在Sql Server表中的文件系统。但是我被问到是否可以在Sql Server中完成,我可以做得很好,但显示/报告方面很重要。需要为这些报销请求生成报告,我不知道Crystal Reports与文件系统的兼容性如何。简而言之,在Sql Server中执行此操作会容易得多。
答案 0 :(得分:2)
您是否考虑过使用数据URI?数据URI允许您将图像等数据直接嵌入到页面中。图像被编码为base 64,然后作为HTML中<img>
元素的源包含在内。您可以阅读有关数据URI的更多信息here。
this question and answer涵盖了如何在C#中执行此操作的详细信息。图像元素最终看起来像<img src="data:image/png;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrS"/>
。
对图像使用数据URI的主要问题是不支持旧版本的IE,或限制图像的大小。 Here是数据URI浏览器限制的文档。
答案 1 :(得分:-1)
<img runat="server"
src='<%# "getImage.aspx?ID=" + DataBinder.Eval(Container.DataItem,
"ImageIdentity") %>' ID="Img1"/>
然后在getimage.aspx
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand("Select Images" ,sqlConnection);
Reader= sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
byte [] byteArray
if(Reader.Read())
{
byteArray= (byte[]) Reader["Images"];
}
System.IO.MemoryStream mstream = new System.IO.MemoryStream(byteArray,0,byteArray.Length);
System.Drawing.Image dbImage = System.Drawing.Image.FromStream( new System.IO.MemoryStream(byteArray));
System.Drawing.Image thumbnailImage = dbImage.GetThumbnailImage(100,100,null,new System.IntPtr());
thumbnailImage.Save(mstream,dbImage.RawFormat);
Byte[] thumbnailByteArray = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(thumbnailByteArray, 0, Convert.ToInt32(mstream.Length));
Response.Clear();
Response.ContentType="image/jpeg";
Response.BinaryWrite(thumbnailByteArray);