2011-01-05 29 views
10

基本的に私はいくつかのドキュメント(主にオフィス)のHTMLプレビューをレンダリングするウェブサイトを持っています。クロムを除くすべてのブラウザ(例えばIE6/7は、いくつかの理由についてChromeブラウザでHTTPハンドラで生成された画像が表示されない

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

:結果のHTML断片は、しかし、画像は以下のリンクで他のサイトからのHTTPハンドラによって返され、同じWebサイトから返されるページに含まれています/ 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(); 
+1

ハンドラは正しいコンテンツタイプを設定していますか? –

+1

あなたのハンドラはどのヘッダをレスポンスに送りますか? –

+0

あなたのサービスが正しいヘッダーを生成していることは絶対に肯定的ですか?私は以前も同様の問題を抱えていました。ほとんどの場合、ヘッダーやストリームに問題がありました。一部のブラウザは、他の人がしていないことを許しています。そして、私はあなたが "ashx"ではなく "ashx"を意味すると仮定します:) –

答えて

5

私はクロームの画像に設定する長さを必要とかなり確信しているので、取り扱い時にあなたの応答にContent-Lengthヘッダを追加してみてください画像。

+0

いいえ、私はまったく同じシステムを持っていますし、どちらもコンテンツの長さを送っていませんが、それでもうまくいきます。 –

+0

私はデータベースから画像を読みました。おそらく、オーバーヘッドが原因でChromeが諦めてしまうほどの遅延が発生します。とにかく、Content-Lengthを追加するとこの問題は解決しました。 – Arunas

2

あなたは、これを追加する必要があります

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

それはcontext.Response.Closeです(); Chromeはそれを好きではありません。その行を取り除くと、すべてが良いでしょう。私はこれと何ヶ月も戦った。

+0

あなたは正しいと思います。私は一般的なpdfを扱うハンドラで同じ問題を抱えていました。 Closeの削除後に消滅しました –

+0

同じですが、Content-Lengthヘッダーも適用されましたが、Close()メソッドを削除すると固定されました。 – Daveloper

+0

私は問題があり、これが私の解決策でした。ありがとう! – bcolin