Varbinary Max изображения - PullRequest
       14

Varbinary Max изображения

3 голосов
/ 20 февраля 2011

Я храню изображения в базе данных в поле varbinary(max).

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

Это мой код:

//I am adding an image in my form
Ext.Net.Image image = new Ext.Net.Image();
image.ID = "imgShow";

FormLayout1.Items.Add(image);

byte[] buffer = q.TckLogo;
MemoryStream memStream = new MemoryStream();
memStream.Write(buffer, 0, buffer.Length);

// it is giving error because of FromStream
image.items.Add(Image.FromStream(memStream)); 

Как я могу отобразить свое изображение в моей форме?

Я использую Ext.Net (Coolite).

Ответы [ 2 ]

4 голосов
/ 20 февраля 2011

В веб-приложении элементы управления изображениями имеют свойство ImageUrl, указывающее на некоторый серверный скрипт, который будет возвращать изображение. Я не знаком с Ext.Net.Image, но я полагаю, что вам нужно использовать обработчик http для обслуживания образа:

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var id = context.Request["id"];
        byte[] imageData = FetchImageFromDb(id);
        context.Response.ContentType = "image/png";
        context.Response.OutputStream.Write(imageData, 0, imageData.Length);
    }

    public bool IsReusable
    {
        get { return true; }
    }
}

и затем укажите точку управления изображением для этого универсального обработчика:

Ext.Net.Image image = new Ext.Net.Image();
image.ID = "imgShow";
// pass some id to the generic handler which will 
// allow it to fetch the image from the database
// and stream it to the response
image.ImageUrl = "~/ImageHandler.ashx?id=123"; 
FormLayout1.Items.Add(image);
image.items.Add(image);
2 голосов
/ 20 февраля 2011

Мне не ясно, что такое Ext.Net здесь или почему вы его используете, но использование FromStream предполагает, что вы путаете с System.Drawing.Image.FromStream; однако событие, которое является спорным, поскольку вы не должны использовать System.Drawing из веб-приложения. Если вы просто пытаетесь вернуть изображение клиенту, вам не нужно обрабатывать его во всех случаях во многих случаях - просто отправьте BLOB-объект клиенту.

Не имеет отношения, но, как отмечает Джон, вы также пытаетесь читать с конца MemoryStream.

...