Использование Google Cloud DataStore и Ajax (Blobs) -Python
-
09-10-2019 - |
Вопрос
Привет, у меня есть некоторые изображения, хранящиеся как BlobProperty в Google Cloud DataStore. Я пытаюсь загрузить эти изображения через Ajax в мой шаблон. Для EG: - У пользователя есть изображение и имя. Теперь область изображения и имени заполняются через AJAX получить звонок на сервер. Я не понимаю, как я отправить эти изображения клиенту, JSON Wont поддерживает двоичные данные. Однако гуглинг вокруг говорит мне о чем-то под названном базе 64. (Я вполне новый, чтобы все это, так что позвольте мне признать, я нуб).
Это единственный способ справиться с этим или есть еще один лучший способ.
Решение
Эта тема предполагает, что если вы просто создаете элемент изображения, установите его SRC и добавьте его на страницу с помощью JavaScript, браузер позаботится о том, чтобы сделать HTTP-запрос для изображения:
http://bytes.com/topic/javascript/answers/472046-using-ajax-xmlhttrequest-load-images.
Если вы хотите сделать это с «чистым» ajax, то Base64, вероятно, лучшее: это способ кодирования двоичных данных (таких как изображения) в виде текста, поэтому вы можете отправить его как длинную строку в JSON.
Другие советы
Вот как я это делаю, это в колбе, но, тем не менее, это Python таким образом, вы создаете обработчик запроса для отображения изображений.
Таким образом, все, что вам нужно сделать, чтобы получить изображение через 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
надеюсь, это поможет