我正在尝试在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);
我已经尝试过了。任何帮助将不胜感激。
答案 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是更多的性能,是否使用..将设置你所有的问题。它解决了我的问题。
答案 4 :(得分:-1)
首先在SQL Server Management Studio中运行查询 - 或其他一些明确确认存在数据的方法。
检查数据实际上是否在数据库中?您在数据库中使用图像字段吗?
这与IE相关的问题没有任何建议。如果上述步骤确认数据的存在和返回,请按照devio的步骤继续。
更新
根据反馈,它肯定看起来像IE8(或更早)/ PNG问题。