java - GZipOutputStream 和应用引擎

标签 java google-app-engine servlets gzip gzipoutputstream

我正在 AppEngine 上编写一个 java servlet。此 servlet 生成 png 图像。我想“压缩”响应。我这样做:

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

// ... png generation ...

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

但是:在开发服务器中,没关系,png 显示正常并且响应压缩得很好。然后我在生产服务器 (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”获取了 servlet,然后我 gunzip“tmp.gz”,图像很好。但是没有浏览器可以正确显示它:( 我的 gzip 有什么问题?

最佳答案

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

关于java - GZipOutputStream 和应用引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444107/

相关文章:

java - Java 应用程序洞察 : how to create a child unit of work

google-app-engine - 谷歌应用引擎最有可能使用哪种编程语言,为什么?

java - Eclipse - 构建功能项目

java - 如何为简单的 ListView 设置 listview.setOnItemClickListener() (仅使用一个类)

google-app-engine - 获取 TemplateSyntaxError : unexpected char u'#' on including a Mustache template in html file served by python Google App Engine

java - 将项目从 Google App Engine Flexible 更改为 Standard

java - 提供服务器中生成并存储在内存中的 zip 文件

java - 添加外部 JAR 到 JDK

java - 设计问题 - Web 应用程序 session 中的持久数据

java - 一种更好的方式来做 Swing 应用程序