Сервиране на изображения за 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)

с, по-рано в същия файл, s/нещо като:

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 Storage и обслужването им директно от там... обслужването им директно от хранилището за данни Е възможно (стига да са са доста малки, тъй като GAE обектът е ограничен до максимум 1MB!), но обикновено не е оптимален.

person Alex Martelli    schedule 16.03.2015