2010-02-09 36 views
0

我试图使用通用处理程序检索并显示存储在数据库中的图像。动态图像(从数据库)使用通用处理程序

但它只是不工作。我试过了下面的代码,但我似乎无法让它工作。

can anyonne spot我做错了,还是有一些建议?

<%@ WebHandler Language="C#" Class="IconsDb" %> 

using System; 
using System.Web; 
using System.Linq; 
using System.Data.Entity; 

public class IconsDb : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
     context.Response.ContentType = "text/plain"; 
     context.Response.Write("Hello World"); 
     Int32 iconId; 

     if (context.Request.QueryString["id"] != null) 
      iconId = Convert.ToInt32(context.Request.QueryString["id"]); 
     else 
      throw new ArgumentException("No parameter specified"); 

     context.Response.ContentType = "image/gif"; 
     //System.IO.Stream strm = ShowEmpImage(iconId); 

     var db = new UdINaturen.UdINaturenContext(); 

     var GetIcon = (from i in db.subcategoryicons 
         where i.id == iconId 
         select i.picture).FirstOrDefault(); 
     object img = GetIcon; 

     System.IO.MemoryStream memStream= new System.IO.MemoryStream((byte[])Convert.FromBase64String(GetIcon)); 
     System.Drawing.Bitmap bitImage=new System.Drawing.Bitmap((System.Drawing.Bitmap)System.Drawing.Image.FromStream(memStream)); 


     byte[] buffer = memStream.ToArray(); 
     context.Response.ContentType = "image/gif"; 
     //context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
     //context.Response.WriteFile(); 
     context.Response.BinaryWrite(buffer); 
     //context.Response.Flush(); 


    } 





    public bool IsReusable { 
     get { 
      return true; 
     } 
    } 

} 
+0

你为什么要在第2行内容类型设置为纯文本? – kd7 2010-02-09 18:01:28

+0

你为什么要将字节数组转换成一个MemoryStream来将一个Bitmap转换成一个字节数组? – dtb 2010-02-09 18:03:11

回答

3

哇,好的。不知道有多少是旧的代码,什么应该被注释掉或W/E,但尝试这样的事:

public void ProcessRequest (HttpContext context) { 
    int iconId; 

    if (string.IsNullOrEmpty(context.Request.QueryString["id"]) || !int.TryParse(context.Request.QueryString["id"], out iconId)) 
     throw new ArgumentException("No parameter specified"); 

    context.Response.ContentType = "image/gif"; 

    var db = new UdINaturen.UdINaturenContext(); 

    var GetIcon = (from i in db.subcategoryicons 
        where i.id == iconId 
        select i.picture).FirstOrDefault(); 
    byte[] buffer = (byte[])Convert.FromBase64String(GetIcon); 

    context.Response.ContentType = "image/gif"; 
    context.Response.BinaryWrite(buffer); 
    context.Response.Flush(); 
} 
+0

你不小心擦掉了Convert.FromBase64String – dtb 2010-02-09 18:13:22

+0

所以我做到了。谢谢,修正。 – TJMonk15 2010-02-10 17:42:30

+0

我可能也有一个通用的“无效参数”图像让处理程序返回而不是抛出异常,但这是个人偏好。 – 2010-06-10 15:03:14

相关问题