1

我正在 AppEngine 上编写一个 java servlet。此 servlet 生成 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”获取了 servlet,然后我用 gunzip 压缩了“tmp.gz”,图像很好。但是没有浏览器可以正确显示它:(我的 gzip 有什么问题?

4

2 回答 2

3

App Engine 基础架构将在适当时为您处理 gzip 内容。你不应该自己做。

于 2010-12-14T23:58:37.740 回答
0

检查下载图像的大小。如果它比您预期的要小,则很可能您需要在关闭之前刷新流。

于 2010-12-14T20:55:37.813 回答