【问题标题】:Chrome browser does not show images generated by HTTP handlerChrome 浏览器不显示 HTTP 处理程序生成的图像
【发布时间】:2011-06-04 00:55:08
【问题描述】:

基本上我有一个网站,可以呈现一些文档的 HTML 预览(主要是办公室)。生成的 HTML 片段包含在同一网站返回的页面中,但是图像由来自另一个网站的 HTTP 处理程序返回,并带有以下链接:

<img width="50" height="50" src="http://portal/Service/GetFile.asxh?id=123&inline=true">

由于某种原因,除 Chrome 之外的所有浏览器(例如 IE6/7/8、Firefox、Opera、Safari)都显示一切正常,但是对于这些图像,Chrome 显示“损坏的图像”图标。如果我选择“在新选项卡中打开图像”,则图像显示得很好。

编辑我以为我已经解决了这个问题,但显然打开 Fiddler 后它工作正常。

我在代码中留下了 context.Response="utf-8",但删除它没有任何区别。

标题:

HTTP/1.1 200 OK
Date: Wed, 05 Jan 2011 14:26:57 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Transfer-Encoding: chunked
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: image/jpeg

代码:

                    context.Response.ContentType = file.ContentType;

                    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

                    byte[] buff = new byte[BuffSize];
                    using (var stream = repository.GetFileContentsAsStream(file.ContentId))
                    {
                        int bytesRead;
                        do
                        {
                            bytesRead = stream.Read(buff, 0, BuffSize);
                            if (bytesRead > 0)
                            {
                                context.Response.OutputStream.Write(buff, 0, bytesRead);
                            }
                        } while (bytesRead > 0);
                    }

                    context.Response.Flush();
                    context.Response.Close();

【问题讨论】:

  • 您的处理程序是否设置了正确的内容类型?
  • 您的处理程序在响应中发送了哪些标头?
  • 您是否绝对肯定您的服务正在生成正确的标头?我以前也遇到过类似的问题,而且几乎总是标题或流的问题,有些浏览器会原谅一些其他浏览器不会原谅的事情。我假设你的意思是“ashx”而不是“asxh”:)
  • 尝试在标题中添加内容长度
  • 是的,内容长度成功了。

标签: asp.net html google-chrome


【解决方案1】:

我很确定 Chrome 需要为图像设置 Length,因此请尝试在处理图像时将 Content-Length 标头添加到您的响应中。

【讨论】:

  • 不,我有完全相同的系统,我也不发送内容长度,但它仍然运行良好。
  • 我从数据库中读取图像。也许开销会增加足够的延迟,导致 Chrome 放弃。无论如何,添加 Content-Length 解决了这个问题。
【解决方案2】:

这是 context.Response.Close();铬不喜欢它。摆脱那条线,一切都会好起来的。我为此奋斗了几个月。

【讨论】:

  • 我认为你是对的。对于提供通用 pdf 的处理程序,我遇到了同样的问题。删除关闭后它消失了
  • 这里也一样,也应用了 Content-Length 标头,但删除了 Close() 方法修复了它。
  • 我遇到了问题,这是我的解决方案。谢谢!
【解决方案3】:

你应该添加这个:

Response.AddHeader("Content-Disposition", "inline;Filename=\"Picture.gif\"");
Response.AddHeader("Content-Length", filesize.ToString());

【讨论】:

    【解决方案4】:

    https://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support

    尝试上述所有方法后,我的问题只是 chrome 等不支持我的图像类型。 chrome 不支持 Tiff。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-11
      • 2023-04-05
      • 2017-07-09
      • 1970-01-01
      • 2013-04-15
      • 2016-02-28
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多