bytearray图像的asp.net

我有一个字节数组表示一个图片。 我想要将存储在该字节数组中的图片呈现在aspx页面中。 我可以使用图像或图像地图控件吗? 如果是这样 – 如何? 如果不是 – 解决scheme是什么?

考虑如何在网页上提供正常的图像 – 文件名在标记中被引用,并且浏览器向该文件的服务器发送单独的请求。

同样的原则适用于这里,除了引用一个静态的图像文件,你可能想要引用一个ASP.NET处理程序来处理图像的字节:

<img src="/imagehandler.ashx" /> 

处理程序的简短forms如下所示:

 public class ImageHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.OutputStream.Write(imageData, 0, imageData.Length); context.Response.ContentType = "image/JPEG"; } } 

这是一个(长) 资源,涵盖了在ASP.NET中创buildHttpHander 的概念 。

另外,正如Joel指出的那样,考虑一下字节数组的来源,因为HttpHandler的服务与页面完全不同。 在最基本的层面上,这两个请求并不知道对方或共享任何数据。

这个问题的常见解决scheme是将图像数据放入caching中:

 Guid id = Guid.NewGuid(); HttpRuntime.Cache.Add(id.ToString(), imageData); 

并将密钥传递给查询string中的HttpHandler,以便从caching中获取它:

 <img src="/imagehandler.ashx?img=<%=id%>" /> <!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 --> 

另一件你可以做得更快的方法是不使用asp.net Image控件,并在html中使用基本的img元素。 因此,在你的asp.net页面中,创build一个img元素,将img和runat设置为server。

那么你可以做这样的事情:

<img id="img" runat="server" alt=""/>

 public DataRow ClaimPhotoRow { get; set; } protected void Page_Load(object sender, EventArgs e) { img.Src = "data:image/jpg;base64," + Convert.ToBase64String((byte[])ClaimPhotoRow[0]); } 

你可以写一个通用的处理函数来处理图片:

 <%@ WebHandler Language="C#" Class="Picture" %> public class Picture : System.Web.IHttpHandler { public void ProcessRequest(HttpContext context) { byte[] buffer = GetPictureFromSomewhere(); context.Response.ContentType = "image/jpeg"; context.Response.OutputStream.Write(buffer, 0, buffer.Length); } public bool IsReusable { get { return false; } } } 

然后在aspx页面中调用它:

 <asp:Image ID="pic" runat="server" ImageUrl="~/Picture.ashx" /> 

下面的文章回答你的问题: 自动绑定byte []到asp:图像