2012-04-13 3 views
0

Я конвертирую свой сайт в использование blobstore для обслуживания изображений, и у меня есть проблема. У меня есть страница с большим количеством изображений, которые визуализируются динамически (через jinja), и единственными доступными данными являются ключи сущности, которые указывают на объекты изображений, которые содержат соответствующий обслуживающий URL.Изображение, поданное из высокопроизводительного blobstore без прямого доступа к get_serving_url()

Раньше каждое изображение было URL вдоль линий "/show-image?key={{image_key}}", что указывает на обработчик запроса по линии этого:

def get(self): 
    imageInfo = db.get(self.request.args.get("key")) 
    imagedata = imageInfo.data // the image is stored as a blob in the normal datastore 
    response = Response() 
    response.data = imagedata 
    response.headers['Content-Type'] = imageInfo.type 
    return response 

Мой вопрос: Как я могу изменить это так, что, вместо того, чтобы вернуться ответ с imageInfo.data, я возвращаю ответ с imageInfo.saved_serving_url (сгенерированный с get_serving_url, когда объект изображения был создан). Что еще более важно, это даже хорошая идея? Кажется, что преобразование saved_serving_url обратно в данные (например, с использованием urllib.fetch) может просто противодействовать скорости и эффективности использования высокоскоростного хранилища данных в первую очередь?

Возможно, мне нужно просто переписать мой код, чтобы шаблон jinja имел прямой доступ к обслуживающим URL-адресам каждого изображения. Но в идеале я бы хотел избежать этого из-за количества параллельных списков, которые мне пришлось бы пройти.

+0

Выбирать URL-адрес самостоятельно и возвращать содержимое будет медленнее, чем просто выполнять функцию blob up. И переадресация на обслуживающий URL также приведет к тому, что вы потеряете все преимущества использования API для обслуживания изображений. Использование URL-адресов, отображающих изображение, является единственным способом получить улучшения, предоставляемые API. –

ответ

3

Почему бы не вернуть обслуживающий URL вместо изображений?

<img src="/show-image?key={{image_key}}" /> 

def get(self): 
    imageInfo = db.get(self.request.args.get("key")) 
    return imageInfo.saved_serving_url 
+0

Это было бы идеально, но оно, похоже, не работает, и не возвращает URL-адрес как self.redirect(). Похоже, что должен быть способ сделать это, хотя ... – Cerzi

+0

что не работает? вы получаете сообщение об ошибке? он не возвращает serve_url? – aschmid00

+0

Изображения просто не загружаются - исходный код страницы показывает их с помощью src "/ show-key? Key = blahblah", но насколько я знаю, просто возврат URL-адреса не приведет к загрузке изображения. Гораздо важнее, что это встроенные изображения, которые я извлекаю из img-тега, а не запрос ajax или что-то, что заменяет полный URL-адрес изображения src. Сказав, что мои знания ответов на http невелики, возможно, я чего-то не хватает ... – Cerzi

Смежные вопросы