Обслуживание изображений для HTML из хранилища данных GAE

Я разрабатываю приложение, которое будет получать HTML и изображения от пользователя и сохранять их в хранилище данных. Пока эта часть сделана. Как я могу использовать эти изображения в качестве ресурсов HTML-страницы, когда пользователь запрашивает определенный?


person Abdul Majeed    schedule 15.03.2015    source источник
comment
Я переписал заголовок, чтобы объяснить суть проблемы (без тегов) и исправил последние несколько предложений, чтобы более четко выразить проблему в виде вопроса. Однако вам, вероятно, следует редактировать, чтобы включить минимизированную версию кода, который в настоящее время сохраняется в хранилище данных.   -  person Nathan Tuggy    schedule 16.03.2015
comment
Да, нам нужно больше информации о вашей конкретной реализации, я даже не понимаю, что вы пытаетесь сделать.   -  person Hanuman    schedule 16.03.2015


Ответы (1)


Если вы непреклонны в том, что хотите хранить изображения в хранилище данных GAE (обычно это не лучший подход — Google Cloud Storage), вы можете предоставить их, например, с записью handlers: с помощью

handlers:
- url: /img/*
- script: images.app

а в images.py у вас есть что-то вроде

app = webapp2.WSGIapplication('/img/(.*)', ImgHandler)

с ранее в том же файле, что-то вроде:

class ImgHandler(webapp2.RequestHandler):
    def get(self, img_key_urlsafe):
        key = ndb.Key(urlsafe=img_key_urlsafe)
        img = key.get()
        self.response.headers['Content-Type'] = 'image/png'
        self.response.write(img.data)

Конечно, вам нужно будет правильно подготовить URL-адреса изображений на стороне клиента (например, в HTML из шаблонов jinja2).

/img/some_image_key_urlsafe

и я предполагаю, что изображения имеют формат PNG и т. д. (конечно, у вас может быть тип контента в качестве одного из атрибутов объекта изображения).

Если изображения не очень маленькие, это добавит значительную нагрузку на ваше приложение GAE, которую можно свести к минимуму, спрятав изображения в хранилище Google и обслуживая их непосредственно оттуда... обслуживать их непосредственно из хранилища данных возможно (при условии, что они довольно малы, поскольку объект GAE ограничен максимальным размером 1 МБ!), но обычно это не оптимально.

person Alex Martelli    schedule 16.03.2015