Использование Google Cloud Datastore и AJAX (blobs) -python - PullRequest
0 голосов
/ 14 ноября 2010

Привет, у меня есть несколько изображений, сохраненных как BlobProperty в Google Cloud Datastore. Я пытаюсь загрузить эти изображения через ajax в мой шаблон. Например: - у пользователя есть изображение и имя. Теперь область изображения и имени заполняется через вызов AJAX get на сервер. Я не понимаю, как отправить эти изображения клиенту, JSON не будет поддерживать двоичные данные. Однако поиск в Интернете говорит мне о чем-то, называемом base 64. (Я новичок во всем этом, поэтому позвольте мне признаться, я нуб).

Это единственный способ справиться с этим или есть какой-то другой лучший способ.

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

Этот поток предполагает, что если вы просто создадите элемент изображения, установите его src и добавите его на свою страницу, используя Javascript, браузер позаботится о создании HTTP-запроса для изображения:

http://bytes.com/topic/javascript/answers/472046-using-ajax-xmlhttprequest-load-images

Если вы хотите сделать это с «чистым» AJAX, то, вероятно, лучше всего использовать base64: это способ кодирования двоичных данных (например, изображений) в виде текста, поэтому вы можете отправить его как длинныйстрока в формате json.

0 голосов
/ 04 января 2012

Вот как я это делаю, это в колбе, но тем не менее это питон таким образом, вы создаете обработчик запросов для отображения изображений.

Таким образом, все, что вам нужно сделать, чтобы получить изображение через ajax, - это получить идентификатор изображения для обслуживания. Это проще, и вы можете управлять размером на лету

from flask import request

from google.appengine.api import taskqueue, images, mail
from google.appengine.ext import db

    @app.route('/image/<img_id>')
    def imgshow(img_id):
      imageuse = Image.all().filter("image_id =", img_id).get()
      if imageuse:
        response = Response(response=imageuse.content)
        #you can use any type over here
        response.headers['Content-Type']='image/png'
        return response
      else:
        return

это то, что я делаю, чтобы манипулировать размером

@app.route('/thumb/<img_id>')
def thumbshow(img_id):
  imageuse = Image.all().filter("image_id =", img_id).get()
  if imageuse:
    thbimg = images.resize(imageuse.content, 80)
    response = Response(thbimg)
    response.headers['Content-Type']='image/png'
    return response
  else:
    return

надеюсь, что поможет

...