HttpHandler не отправляет изображение во время выполнения - PullRequest
0 голосов
/ 12 ноября 2011

Мои изображения вдруг не будут работать в моем приложении.Во время разработки они появляются идеально.Но все мои изображения не там во время выполнения.У меня есть они в папке изображений.Я использую "~ /", чтобы вернуться в корневой каталог.Это раньше работало и по какой-то причине перестало работать.Есть идеи?

<asp:Image ID="imgFirstElected" runat="server" 
          ImageUrl="~/Images/calendar_icon.gif" style="cursor:pointer;" />

Редактировать:

Хорошо, я только что узнал, что это из-за моего ImageHandler.Если я удалю этот код из моего web.config, мои изображения появятся снова.Любая идея, как я могу решить эту проблему?

<httpHandlers>
  <add verb="*" path="*.bmp" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.jpg" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.gif" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.png" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
</httpHandlers>

Редактировать: Код обработчика изображений

public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public void ProcessRequest(HttpContext context)
    {
        int imageid = Parser.GetInt(context.Request.QueryString["ImID"]);
        ProfileImage image = new ProfileImage(Parser.GetInt(imageid));

        if (imageid > 0)
        {
            context.Response.ContentType = "image/jpeg";
            Stream strm = ShowImage(imageid);
            byte[] buffer = new byte[4096];
            int byteSeq = strm.Read(buffer, 0, 4096);

            while (byteSeq > 0)
            {
                context.Response.OutputStream.Write(buffer, 0, byteSeq);
                byteSeq = strm.Read(buffer, 0, 4096);
            }
        }

        /*
        string imageid = context.Request.QueryString["ImID"];
        ProfileImage image = new ProfileImage(Parser.GetInt(imageid));

        context.Response.BinaryWrite(image.ImageData);
        context.Response.End(); */
    }

    public Stream ShowImage(int imageID)
    {
        ProfileImage image = new ProfileImage(Parser.GetInt(imageID));

        try
        {
            return new MemoryStream(image.ImageData);
        }
        catch
        {
            return null;
        }
    }

1 Ответ

1 голос
/ 14 ноября 2011

Вам нужно звонить context.Response.Flush(); после окончания while цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...