我可以将图像与页面一起流式传输,而不是发送ImageUrl
本文关键字:ImageUrl 传输 图像 一起 我可以 | 更新日期: 2023-09-27 18:11:29
我有图像存储在Sql Server数据库中,我想在网页上显示它们。
问题是,ASP中的图像控件。. NET有ImageUrl属性,它接受包含图像文件的文件夹的路径值。但是我正在从数据库表中绘制映像,并且不想将映像保存到磁盘,以便我可以提供路径。我宁愿将图像直接流式传输到页面。
我很难想象这个(双关语),并且怀疑唯一的方法是将图像临时保存到一个位置,然后路径到图像控件。但也许我遗漏了什么?
edit to Add:
这是为报销旅费时需要出示旅费收据的会计制度准备的。我们正在考虑允许用户(我们有30,000名用户)扫描他们的收据,并将其与报销请求关联起来存储。我认为,在文件系统中存储这些数据是一种方法,在Sql Server表中存储文件系统的索引。但我被要求看看这是否可以在Sql Server中完成,我可以做到这一点,但显示/报告方面很重要。需要为这些报销请求生成报告,我不知道Crystal Reports是否符合文件系统。总之,在Sql Server中这样做要容易得多。
您考虑过使用数据uri吗?数据URI允许您将图像等数据直接嵌入到页面中。该图像被编码为base 64,然后作为HTML中<img>
元素的源包含。您可以在这里了解更多关于数据uri的一般信息。
如何在c#中做到这一点的细节包含在这个问答中。图像元素最终看起来像<img src="data:image/png;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrS"/>
。
对图像使用数据uri的主要问题是旧版本的IE不支持,或者限制了图像的大小。以下是关于数据uri的浏览器限制的文档。
<img runat="server"
src='<%# "getImage.aspx?ID=" + DataBinder.Eval(Container.DataItem,
"ImageIdentity") %>' ID="Img1"/>
then in 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);