JQuery Ajax вызов HTTP-обработчик (.ashx) - PullRequest
1 голос
/ 10 августа 2011

У меня есть обработчик HTTP, который отправляет изображение клиенту (во время обратной передачи):

    public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Byte[] pic = GetPhoto(Convert.ToInt32(context.Request.QueryString["userID"]));

        if (pic != null)
        {
            context.Response.ContentType = "image/jpeg";
            context.Response.OutputStream.Write(pic, 0, pic.Length);
        }
        else
        {
            context.Response.ContentType = "image/png";
            context.Response.WriteFile("/AllImages/DefaultPicture_large.png");
        }
    }

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

Как я могу использовать этот обработчик для отправки изображения клиенту с помощью jQuery ajax-запроса?

Несколько вопросов: 1) Как конвертировать изображение в JSON? 2) Если невозможно преобразовать изображение в JSON, какой формат можно использовать для отправки изображения клиенту?

Tnx много!

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

1) Чтобы отправить изображение в формате JSON, необходимо преобразовать его в строку в кодировке base64:

 string imageString = Convert.ToBase64String(pic);
 return imageString;

2) Однако не во всех браузерах(IE <8) поддерживает схему data-uri, которую необходимо использовать для отображения этих кодированных в base64 изображений. </p>

Наилучшим подходом было бы написать тег img с src, указывающим на httpHandler.

3 голосов
/ 10 августа 2011

Вы просто хотите отобразить его на странице?Почему бы просто не написать тег img с src, указывающим на ваш обработчик?

Что-то вроде:

var img_url = '/myImageHandler.ashx?userDI=' + some_user_id;
$("#displayArea").append($("<img src='" + img_url + "' alt='user image' />"));
...