ASP.NET没有';t在IE8中显示来自数据库的图像
我试图在ASP.NET网页中显示数据库中的图像。我使用的是一个通用处理程序,它在firefox、chrome和IE9上运行良好,但在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) {
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通道和透明度问题无关
根据反馈,它看起来确实像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));