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の何が問題なのですか?