Я использую следующий код:
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 - Я знаю, что это не самый надежный код, но он используется только для моего внутреннего проекта, он не создан для масштабирования.
В конце концов мне удалось исправить это, я думаю, что проблема заключалась в сочетании 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())
Похоже, что Content-Type установлен неправильно
Content-Length:72643
Content-Type:text/html
Date:Thu, 27 Jan 2011 13:01:57 GMT
Server:Google Frontend
Это объясняет, почему вы видите содержимое файла вместо отображаемого изображения.
print
в веб-приложении RequestHandler. Вы будете печатать в stdout, а не в объекте ответа, и то, что вы напечатали, будет в итоге в необработанном CGI-ответе, обычно скрытом в заголовках.