Ответ на изображение в Google App Engine - PullRequest
4 голосов
/ 12 февраля 2012

Я сохраняю изображение пользователя как BlobProperty, выполнив:

user.image = urlfetch.fetch(image_url).content

Затем я отрисовываю это изображение, используя URL-адрес, такой как:

/image/user_id

Изображение должно быть сохранено, потому что, когда я делаю len (user.image), я получаю число в тысячах. И на локальном примере изображение отображается нормально. В развернутом приложении я получаю следующую ошибку, и при переходе по URL-адресу изображения в браузере ничего не отображается:

Traceback (most recent call last): File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 86, in run self.finish_response() File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response self.write(data) File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 202, in write assert type(data) is StringType,"write() argument must be string" AssertionError: write() argument must be string

Кроме того, вот обработчик, который обслуживает изображение:

class ImageHandler(webapp2.RequestHandler):
""" Returns image based on id. """
def get(self, *args, **kwargs):
    user = db.get(
        db.Key.from_path('User', models.User.get_key_name(kwargs.get('id'))))
    if user.image:
        self.response.headers['Content-Type'] = "image/jpeg"
        self.response.out.write(user.image)
    else:
        self.response.out.write("No image")

Просто, чтобы уточнить, я пытался установить оба типа содержимого для JPEG и PNG. И все работает нормально на локальном сервере. Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Почему бы не записать изображение в хранилище, а затем использовать механизм send_blob ()?

http://code.google.com/appengine/docs/python/blobstore/overview.html#Serving_a_Blob

0 голосов
/ 15 февраля 2012

Отвечая на мой вопрос, это все исправляет:

self.response.out.write(str(user.image))

Это сбивает с толку, потому что пример в документации не приводит BlobProperty как строку.

...