динамическое изображение (из БД) с использованием Generic Handler - PullRequest
0 голосов
/ 09 февраля 2010

Я пытаюсь использовать универсальный обработчик для извлечения и отображения изображений, хранящихся в базе данных.

Но это просто не работает. Я пытался проверить приведенный ниже код, но, похоже, не могу заставить его работать.

Кто-нибудь может заметить, что я делаю неправильно, или есть предложения?

<%@ 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;
        }
    }

}

1 Ответ

3 голосов
/ 09 февраля 2010

вау, хорошо Не уверен, сколько из этого старого кода, что должно быть закомментировано или без, но попробуйте что-то вроде этого:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...