1

AppEngine で Java サーブレットを作成しています。このサーブレットは png 画像を生成します。応答を「gzip」したいと思います。私はこのようにします:

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)でテストしますが、「壊れた」イメージしか得られません...

代替テキスト

私のコードの何が問題なのですか? 開発/本番環境に関連していますか?

もちろん、出力を 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」をガンジップすると、画像は問題ありません。しかし、それを正しく表示できるブラウザはありません:(私のgzipの何が問題なのですか?

4

2 に答える 2

3

必要に応じて、App Engine インフラストラクチャがコンテンツの gzip 圧縮を処理します。自分でやるべきではありません。

于 2010-12-14T23:58:37.740 に答える
0

ダウンロードした画像のサイズを確認します。予想よりも小さい場合は、閉じる前にストリームをフラッシュする必要がある可能性があります。

于 2010-12-14T20:55:37.813 に答える