2012-03-07 20 views
1

ダイナミックに作成された画像のコンテンツ長をHTTPレスポンスに簡単に設定する方法を探しています。ASP.NETでダイナミックに作成された画像のコンテンツ長を設定する

Response.AddHeader("Content-Length", Response.OutputStream.Length()) 

とコンテンツの長さが予期しない結果をもたらす設定やろうとし

Response.ContentType = "image/jpeg"; 
Response.Clear(); 
Response.BufferOutput = true; 
... 
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb); 
... 
bmp.Save(Response.OutputStream, ImageFormat.Jpeg); 
Response.Flush(); 

また、ファイルを別のストリーム(MemoryStreamなど)にコピーして、出力ストリームに再度コピーすることは望ましくありません。

アイデア?

ありがとうございました。

+1

HTTPサーバークラスはチャンクエンコードをサポートしていますか?もしそうなら、ちょうどそれを使用し、あなたはサイズを設定する必要はなく、あなたはまだ接続を生かしておくことができます。 –

+0

@ Edenの場合、画像をmem-streamに保存してコンテンツの長さを測定する必要があります。 OTOH、Reponse.WriteFile(またはTransmitFile)を使ってディスク上のイメージをプッシュし、そこから配信するのはなぜですか?この方法は、同じイメージを複数回(おそらくあなたがディスクにキャッシュしている)、複数のユーザーに(おそらく)提供しなければならない場合にのみ意味をなさないでしょう。 – VinayC

+0

@DavidSchwartz - ドキュメンテーションから、IIS 7.5ではチャンクエンコーディングがサポートされているようですが、レスポンスヘッダーには表示されません。この問題を調査する必要があります。ありがとう! – Eden

答えて

4
long bmpByteSize; 
using (var ms = new MemoryStream(estimatedLength /* you can instantiate without this parameter at all */)) 
{ 
    bmp.Save(ms, ImageFormat.Png); 
    bmpByteSize= ms.Length; 
} 
+0

これは私が避けようとしている正確なことです。 – Eden

+0

する必要があります。あるいは@David Schwartzのコメントを参照してください。あなたは彼に反応しなかった。 –

+0

いいえ、多くのオプションがあります。たとえば、私が必要としている自分のHttpResponseクラスを書くことができます。 – Eden

関連する問題