Mit Google Cloud Datastore und AJAX (Blobs) -python
-
09-10-2019 - |
Frage
Hallo, ich habe ein paar Bilder als BlobProperty in Google Cloud Datastore gespeichert. Ich versuche, diese Bilder über Ajax in meine Vorlage zu laden. Für zB: - hat ein Benutzer ein Bild und einen Namen. Nun ist der Bild- und Namensbereich wird über einen AJAX get Aufruf an den Server aufgefüllt. Ich bin nicht verstehen, wie ich diese Bilder an den Client senden, JSON Binärdaten unterstützen würde nicht. Allerdings sagt googeln um mich an etwas, genannt Basis 64 (ich bin ganz neu auf all dies, so lassen Sie mich zugeben, ich bin ein noob).
Ist dies der einzige Weg, dies zu umgehen oder gibt es eine andere Art und Weise besser.
Lösung
Dieser Thread schlägt vor, dass, wenn Sie nur ein Bildelement erstellen, dessen src gesetzt, und fügen Sie ihn auf Ihrer Seite mit Javascript, wird der Browser zum Herstellen einer HTTP-Anforderung für das Image pflegen:
http://bytes.com/topic/ Javascript / Antworten / 472046-using-ajax-xmlhttprequest-load-Bilder
Wenn Sie nicht wollen, es zu tun mit ‚reinem‘ AJAX, dann base64 ist wahrscheinlich das Beste: es ist eine Möglichkeit, binäre Daten der Codierung (wie Bilder) als Text, so dass Sie es als eine lange Zeichenfolge in json schicken.
Andere Tipps
Dies ist, wie ich es tun, dann ist es in der Flasche, aber dennoch Python seines Auf diese Weise können Sie einen Request-Handler erstellen, um die Bilder anzuzeigen.
Also alles, was Sie tun müssen, um das Bild über Ajax bekommen wird immer das Bild-ID, serviert werden. Es ist einfacher und Sie können die Größe als auch im laufenden Betrieb
manipulierenfrom 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
das ist, was ich tun, um die Größe zu manipulieren
@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
Hoffnung, die
hilft