ASP.NET不会在IE8中显示数据库中的图像

时间:2012-02-13 21:58:51

标签: asp.net internet-explorer-8

我正在尝试在ASP.NET网页中显示数据库中的图像。我正在使用通用处理程序,它在firefox,chrome和IE9上工作正常,但在IE8中却没有。这是我的通用处理程序代码:

    public void ProcessRequest(HttpContext context)
    {
        byte[] FileContent = null;
        if (context.Request.QueryString["imagen"] != null)
        {
            FileContent = GetImageFromDatabase(context.Request.QueryString["imagen"]);
            context.Response.ContentType = "image/png";
            context.Response.BinaryWrite(FileContent);
        }
    }

我的asp页面标记中有一个图像:

<asp:Image ID="imgInicio" runat="server" Width="100%" AlternateText="Inicio" />

最后我在load事件上调用它;

imgInicio.ImageUrl = String.Format(@"~/ShowImage.ashx?imagen={0}", idImage);

我已经尝试过了。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

您有几种可能性来调试这种情况:

  • 在ProcessRequest中设置断点,以确定IE是否从服务器请求图像

  • 使用开发人员工具(F12)查看图片是否已加载到页面中,但未呈现

  • 使用开发者工具更改兼容性和文档类型设置(它们在IE8中是否可用?)并查看这些更改是否对图像渲染有任何影响

  • 确保图片确实存储并在Web服务器声称它们是.png时用作.png(某些浏览器可能比其他浏览器更容易受到MIME类型的影响)

  • 在呈现图像的浏览器中,将图像下载到本地硬盘并使用图像查看器确认图像格式确实是png

  • 验证问题与早期IE的Alpha通道和透明度问题无关

答案 1 :(得分:1)

我遇到的图像在ie8中出现故障而在任何其他浏览器中都没有问题,结果发现我的.jpg图像意外地保存为CMYK而不是RGB。 Chrome,Safari,Firefox,ie9都没有问题,只是ie8表明它们已经坏了。

答案 2 :(得分:0)

问题已解决

我找到了解决方案。我不知道为什么在Internet Explorer 8中你必须指定图像的格式。我必须使用System.Drawing命名空间编写代码来格式化它。我使用以下方法添加了一个辅助类:

    public static Image ImageFromBytes(byte[] buffer)
    {
        try
        {
            using (MemoryStream ms = new MemoryStream(buffer))
            {
                return Image.FromStream(ms);
            }
        }
        catch
        {
            return null;
        }
    }
    public static byte[] FormatImage(byte[] buffer, ImageFormat format)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (Image img = ImageFromBytes(buffer))
            {
                img.Save(ms, format);
            }
            return ms.ToArray();
        }
    }

然后我在处理程序中调用mehod:

context.Response.BinaryWrite(ImageHelper.FormatImage(FileContent, System.Drawing.Imaging.ImageFormat.Png));

我认为,当我们将字节转换为System.Drawing.Image,然后使用Save方法再次检索字节时,框架会做一些事情,可能添加或删除一些其他浏览器忽略的字节,但是对Internet Explorer 8很重要。这就是我的想法,但不确定。问题是它对我有用

答案 3 :(得分:0)

我的Internet Explorer 8图像数据库无法正常工作但所有其他浏览器都有问题。

我使用了BinaryWrite。我正在使用BinaryWrite和OutputStream.write之间的性能测试页面。

OutputStream.write是更多的性能,是否使用..将设置你所有的问题。它解决了我的问题。

url:http://www.dotnetperls.com/response-binarywrite

答案 4 :(得分:-1)

首先在SQL Server Management Studio中运行查询 - 或其他一些明确确认存在数据的方法。

检查数据实际上是否在数据库中?您在数据库中使用图像字段吗?

这与IE相关的问题没有任何建议。如果上述步骤确认数据的存在和返回,请按照devio的步骤继续。

更新

根据反馈,它肯定看起来像IE8(或更早)/ PNG问题。