file.read () в appengine возвращает ненужные символы

1

Я использую следующий код:

class Image(webapp.RequestHandler):
    def get(self, id):
        path = os.path.join(os.path.dirname(__file__), 'fcimages/%s.png' % id)
        self.response.headers['Content-Type'] = 'image/png'
        print file(path,'rb').read()

И он работает нормально локально (т.е. возвращает изображение), но когда я использую его на реальном сервере, я получаю хлам. Вы можете увидеть результат здесь: http://1.ge0.co/fc/1.png

Что я делаю неправильно?

Спасибо!

PS - Я знаю, что это не самый надежный код, но он используется только для моего внутреннего проекта, он не создан для масштабирования.

Теги:
google-app-engine
file-io

2 ответа

5
Лучший ответ

В конце концов мне удалось исправить это, я думаю, что проблема заключалась в сочетании self.response и print. Вот код, который работает:

class Image(webapp.RequestHandler):
    def get(self, id):
        path = os.path.join(os.path.dirname(__file__), 'fcimages/%s.png' % id)
        self.response.headers['Content-Type'] = "image/png"
        self.response.out.write(file(path, 'rb').read())
  • 3
    да. Никогда не используйте print в веб-приложении RequestHandler. Вы будете печатать в stdout, а не в объекте ответа, и то, что вы напечатали, будет в итоге в необработанном CGI-ответе, обычно скрытом в заголовках.
0

Похоже, что Content-Type установлен неправильно

Content-Length:72643
Content-Type:text/html
Date:Thu, 27 Jan 2011 13:01:57 GMT
Server:Google Frontend

Это объясняет, почему вы видите содержимое файла вместо отображаемого изображения.

  • 0
    Я изменил строку 4 в своем исходном коде так: выведите «Content-Type: image / png», и теперь я получаю пустую страницу вместо ненужного кода ... Есть еще советы?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню