我可以将图像与页面一起流式传输,而不是发送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中这样做要容易得多。

我可以将图像与页面一起流式传输,而不是发送ImageUrl

您考虑过使用数据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);