bytearray для обработки изображений asp.net

Мне также нравится блокнот ++ .

22
задан Rex M 15 November 2009 в 19:01
поделиться

2 ответа

Подумайте о том, как обычные изображения обслуживаются на веб-странице - имя файла указывается в разметке, и браузер отправляет отдельный запрос на сервер для этого файла.

Применяется тот же принцип. здесь, за исключением того, что вместо ссылки на файл статического изображения вам нужно будет ссылаться на обработчик ASP.NET, который обслуживает байты изображения:

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

Сокращение обработчика будет выглядеть примерно так:

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

Вот (длинный ) ресурс, который охватывает концепции создания HttpHander в ASP.NET.

Кроме того, как указывает Джоэл, подумайте о том, откуда берется байтовый массив, поскольку HttpHandler обслуживается совершенно другим запрос, чем страница. На самом базовом уровне два запроса не знают друг друга и не используют какие-либо данные.

Распространенным решением этой проблемы является помещение данных изображения в кэш:

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

И передайте ключ HttpHandler в строке запроса, чтобы он мог получить его из кеша:

<img src="/imagehandler.ashx?img=<%=id%>" />
<!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 -->
21
ответ дан 29 November 2019 в 03:48
поделиться

Вы можете написать общий обработчик, который будет обслуживать изображение:

<%@ 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" />
4
ответ дан 29 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: