ASP.NET没有';t在IE8中显示来自数据库的图像

ASP.NET没有';t在IE8中显示来自数据库的图像,asp.net,internet-explorer-8,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) {

我试图在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" />

我都试过了。如果您有任何帮助,我们将不胜感激。

您有多种可能调试这种情况:

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

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

  • 使用开发人员工具更改兼容性和doctype设置(它们在IE8中可用吗?)

  • 当web服务器声称图像是.png时,请确保图像确实存储并作为.png提供(某些浏览器可能比其他浏览器更容易受到MIME类型的影响)

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

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


首先在SQL Server Management Studio中运行查询,或者通过其他方式确定有数据返回

检查数据是否确实在数据库中?是否在数据库中使用图像字段

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

更新


根据反馈,它看起来确实像IE8(或更早版本)/PNG问题。

问题已解决

我找到了解决办法。我不知道为什么在InternetExplorer8中必须指定图像的格式。我必须编写代码,使用System.Drawing命名空间对其进行格式化。我使用以下方法添加了一个helper类:

    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();
        }
    }
然后我调用处理程序中的方法:

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

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

我在ie8中显示的图像有问题,而在其他浏览器中没有显示,结果我的.jpg图像被意外地保存为CMYK而不是RGB。Chrome、Safari、Firefox、ie9都没有问题,只是ie8显示它们坏了。

我的Internet Explorer 8数据库映像不工作也有同样的问题,但所有其他浏览器都有

我用二进制写。我看到的是BinaryWrite和OutputStream.write之间的性能测试页面

OutputStream.write的性能更高,它的使用是否。。我会解决你所有的问题。它把我的问题摆在我这边


url:

您能发布生成的HTML吗?这看起来不会被浏览器破坏。也许你的CSS规则在IE8中不起作用,导致图像不出现?是的,鲁本斯,我写得很糟糕,图像在两个位置都是SVCSJONE,我不认为这是因为当我进入到。IE8显示了一个损坏的图像,但我在firefox上使用chrome和IE9。另一个想法是:它能与不同的内容类型一起工作吗?谢谢,我要试试这个。还有一个问题,如何确定图像是否已加载到页面中,但未使用开发人员工具(F12)呈现?您可以在DevTools中导航HTML树并选择树中包含的任何元素。所选元素在IE中用蓝色框突出显示。这只是猜测,可能会有帮助。我已经检查过了,我看到图像在那里,因为当我将de页面保存为完整网页时,IE下载图像,如果我用chrome或firefox打开下载的网页,我可以看到图像。我认为图像已加载但未渲染谢谢,我可以看到图像在数据库中保存为图像数据类型。当我调试处理程序时,我看到那里有字节数组。就它在其他浏览器上的工作而言,我认为这是IE的问题,但我不明白你是不是用JPEG试试?(只是为了缩小内容类型的问题)。另外,如果这是在某种重复控件中,那么您为IsReusable属性设置了什么布尔类型?也请检查:是的,我尝试了JPEG图像,但什么都没有,它显示在Firefox、IE9和Chrome上,但不显示在IE8上。您是否记得在测试JPEG时从“image/png”更改内容类型?您是否在问问题?如果是,请将其作为新问题发布。
context.Response.BinaryWrite(ImageHelper.FormatImage(FileContent, System.Drawing.Imaging.ImageFormat.Png));