2010-12-14 12 views
1

AppEngineにJavaサーブレットを作成しています。このサーブレットはpngイメージを生成します。私は応答を "gzip"したいと思います。GZipOutputStream&appengine

resp.setHeader("Content-Encoding","gzip"); 
resp.setContentType("image/png"); 

// ... png generation ... 

GZIPOutputStream gzos = new GZIPOutputStream(resp.getOutputStream()); 
gzos.write(myPNGdata); 
gzos.close(); 

:しかし、開発サーバでは、それは大丈夫だが、細かいPNGが表示され、レスポンスが良くgzip圧縮されている私は、このようにそれを行います。それから私は本番サーバ(AppEngineの)上でテストし、私が得るすべては私のコードで間違っている可能性が何

alt text

...「壊れた」イメージですか?それはdev/prod環境に関係していますか?

もちろん、出力をgzipしないと、どちらの環境でも問題ありません。

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


編集:

GZIPOutputStream gzos = new GZIPOutputStream(resp.getOutputStream()); 
gzos.write(ImagesServiceFactory.makeImage(readImage("somePicture.png")).getImageData()); 
gzos.flush(); 
gzos.finish(); 
gzos.close(); 

と、それはどちらか動作しません:私は、あまりにもこれを試してみました。


編集2:実際には、応答はgzipです。私は "curl theUrl> tmp.gz"でサーブレットを取り出した後、 "tmp.gz"をgunzipし、イメージは正常です。しかし、誰ブラウザは、それが正しく私のgzipで何が悪い:(表示することができません?

答えて

0

をダウンロードした画像のサイズを確認してください。それはあなたが期待し、その後も小さい場合には、最も可能性の高いあなたが閉じる前に、ストリームをフラッシュする必要があります。

+0

私は 'gzos.flush();'と 'gzos.finish();'を試してみましたが、それはあなたには当てはまりませんでした。 App EngineでKOしてください。 –

+0

resp.getOutputStream()を試しましたか?flush()? –

3

+0

http://code.google.com/appengine/docs/java/runtime.html#Responses –

+0

Iそれを知っているが、私は変えることができないeはクライアント側(レガシーアプリ)からヘッダを要求します。しかし、それは開発サーバーで動作しているので、それは本当のアプリエンジンで動作するはずですね。 –

+0

@Francois dev_appserverで動作するとバグです。これらのヘッダを本番環境で自分で設定することはできないからです。 –