3

我有图像存储在 Sql Server 数据库中,我想在网页上显示它们。

问题是,ASP.NET 中的 Image 控件具有 ImageUrl 属性,它获取包含图像文件的文件夹的路径值。但我正在从数据库表中绘制我的图像,并且不想将图像保存到磁盘,以便我可以提供路径。我宁愿将图像直接流式传输到页面。

我什至很难想象这一点(双关语),并且怀疑这将完成的唯一方法是将图像临时保存到某个位置,然后将其路由到图像控件。但也许我错过了什么?

编辑添加:

这是一个会计系统,其中需要提供差旅费用收据以进行报销。我们正在考虑允许用户(我们有 30,000 名用户)扫描他们的收据并将其与他们的报销请求关联起来存储。我想,将它存储在文件系统中是一种方法,将索引存储在 Sql Server 表中的文件系统中。但是我被要求看看这是否可以在 Sql Server 中完成,我可以做到这一点,但显示/报告方面很重要。需要为这些报销请求生成报告,我不知道 Crystal Reports 与文件系统的兼容程度如何。简而言之,在 Sql Server 中执行此操作会容易得多。

4

2 回答 2

2

您是否考虑过使用数据 URI?数据 URI 允许您将图像等数据直接嵌入到您的页面中。图像被编码为 base 64,然后作为<img>元素的源包含在 HTML 中。您可以在此处阅读有关数据 URI 的更多信息。

此问题和答案涵盖了如何在 C# 中执行此操作的详细信息。图像元素最终看起来像<img src="data:image/png;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrS"/>.

对图像使用数据 URI 的主要问题是不支持旧版本的 IE,或者限制图像的大小。 是数据 URI 的浏览器限制的文档。

于 2013-06-14T03:58:00.670 回答
-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);
于 2013-04-30T19:13:52.017 回答