Arunas
Arunas

Reputation: 918

Chrome browser does not show images generated by HTTP handler

Basically I have a web site that renders HTML preview of some documents (mainly office). The resulting HTML fragment is included in the page returned by the same web site, however images are returned by HTTP handler from another site with the following links:

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

For some reason all browsers except Chrome (e.g. IE6/7/8, Firefox, Opera, Safari) show everything just fine, however for these images Chrome shows "broken image" icon. If I choose "Open image in new tab" then the image is shown just fine.

Edit I thought I have solved this issue, but apparently with Fiddler turned on it works fine.

I had context.Response="utf-8" left in code, but removing it had no difference.

Headers:

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

Code:

                    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();

Upvotes: 10

Views: 11495

Answers (4)

monkeyjumps
monkeyjumps

Reputation: 712

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

My issue after trying all of the above was simply that chrome among others do not support my image type. Tiff is not supported by chrome.

Upvotes: 0

David L. Sargent
David L. Sargent

Reputation: 331

It's the context.Response.Close(); Chrome doesn't like it. Get rid of that line and all will be good. I fought with this for months.

Upvotes: 4

Remy
Remy

Reputation: 12703

You should add this:

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

Upvotes: 2

Pauli &#216;ster&#248;
Pauli &#216;ster&#248;

Reputation: 6916

I'm pretty sure Chrome requires the Length to be set for images, so try adding the Content-Length header to your response when handling the image.

Upvotes: 5

Related Questions