GZipOutputStream & appengine - PullRequest
       48

GZipOutputStream & appengine

1 голос
/ 14 декабря 2010

Я пишу Java-сервлет в AppEngine.Этот сервлет генерирует 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 отображается нормально, а ответ хорошо распаковывается.Затем я тестирую на производственном сервере (AppEngine), и все, что я получаю, это «испорченное» изображение ...

alt text

Что может быть не так с моим кодом?Это связано со средой dev / prod?

Конечно, если я не распакую вывод, все нормально в обеих средах.

Спасибо за любую помощь.


Редактировать: я тоже пробовал:

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?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2010

Инфраструктура App Engine позаботится о сжатии контента для вас, когда это необходимо. Ты не должен делать это сам.

0 голосов
/ 14 декабря 2010

Проверьте размер загруженного изображения.Если оно меньше, чем вы ожидаете, скорее всего, вам нужно очистить поток перед закрытием.

...