use*_*218 22 asp.net image bytearray
我有一个表示图片的字节数组.我想在aspx页面中呈现存储在该字节数组中的图片.我可以使用图像或图像映射控件吗?如果是这样 - 怎么样?如果不是 - 解决方案是什么?
小智 35
另一件你可以做的更快的是不使用asp.net Image控件并使用html中的基本img元素.因此,在您的asp.net页面中,创建一个idg为img且runat设置为server的img元素.
然后你可以做这样的事情:
<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]);
}
Run Code Online (Sandbox Code Playgroud)
Rex*_*x M 21
考虑如何在网页中提供正常图像 - 文件名在标记中引用,浏览器向服务器发送单独的请求以获取该文件.
这里适用的原理相同,除了不引用静态图像文件之外,您还需要引用一个提供图像字节的ASP.NET处理程序:
<img src="/imagehandler.ashx" />
Run Code Online (Sandbox Code Playgroud)
处理程序的缺点看起来像这样:
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.OutputStream.Write(imageData, 0, imageData.Length);
context.Response.ContentType = "image/JPEG";
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个(长)资源,涵盖了在ASP.NET中创建HttpHander 的概念.
此外,正如Joel所指出的那样,考虑一下字节数组的来源,因为HttpHandler的服务请求与页面完全不同.在最基本的级别,这两个请求彼此不了解或共享任何数据.
此问题的常见解决方案是将图像数据放入缓存中:
Guid id = Guid.NewGuid();
HttpRuntime.Cache.Add(id.ToString(), imageData);
Run Code Online (Sandbox Code Playgroud)
并将密钥传递给查询字符串中的HttpHandler,以便它可以从缓存中获取它:
<img src="/imagehandler.ashx?img=<%=id%>" />
<!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 -->
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42508 次 |
| 最近记录: |