Ich konvertiere meine Website auf die Verwendung der Blobstore für Image-Serving und habe ein Problem. Ich habe eine Seite mit einer großen Anzahl von Bildern, die dynamisch gerendert werden (über Jinja), und die einzigen verfügbaren Daten sind Entitätsschlüssel, die auf Bildobjekte zeigen, die die relevante Serving-URL enthalten.Image-Serving von der High-Performance-Blobstore ohne direkten Zugriff auf get_serving_url()
Früher jedes Bild hatte eine URL entlang der Linien von "/show-image?key={{image_key}}"
, die entlang der Linien von diesem auf einen Request-Handler-Punkte:
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
Meine Frage ist: Wie kann ich das ändern, so dass, anstatt Rückkehr eine Antwort mit imageInfo.data
, ich gebe eine Antwort mit imageInfo.saved_serving_url
(generiert von get_serving_url
, wenn das Bildobjekt erstellt wurde). Noch wichtiger, ist das überhaupt eine gute Idee? Es scheint, als würde die Umwandlung der saved_serving_url
zurück in Daten (z. B. mit urllib.fetch
) nur die Geschwindigkeit und Effizienz der Verwendung der High-Speed-Datenspeicher an erster Stelle entgegenwirken?
Vielleicht sollte ich nur meinen Code neu schreiben, so dass die Jinja Vorlage direkten Zugriff auf die dienenden URLs jedes Bildes hat. Aber im Idealfall möchte ich das vermeiden aufgrund der Menge an parallelen Listen, die ich weitergeben muss.
Das Abrufen der URL selbst und das Zurücksenden des Inhalts wird viel langsamer sein, als nur das Blob direkt zu bedienen. Und das Versenden von Weiterleitungen an die Serving-URL wird Sie ebenfalls alle Vorteile der Verwendung der Image-Serving-API verlieren. Die Verwendung der Image-Serving-URLs ist die einzige Möglichkeit, die von der API bereitgestellten Verbesserungen zu erzielen. –