2012-04-13 7 views
0

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.

+0

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. –

Antwort

3

warum nicht die serving url anstelle der imagedata zurückgeben?

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

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

Das wäre ideal, aber es scheint nicht zu funktionieren, ebenso wenig die URL als self.redirect() zurückzugeben. Fühlt sich an, als sollte es einen Weg geben, dies zu tun, aber ... – Cerzi

+0

was nicht funktioniert? erhalten Sie einen Fehler? Gibt es die serving_url nicht zurück? – aschmid00

+0

Die Bilder können nicht geladen werden - der Quellcode der Seite zeigt sie mit dem src "/ show-key? Key = blahblah" aber soweit ich weiß, wird das Bild einfach nicht geladen, wenn man eine URL zurückgibt. Denken Sie daran, dass dies eingebettete Bilder sind, die ich aus dem img-Tag abrufe, keine Ajax-Anfrage oder etwas, das die gesamte Bild-src-URL ersetzt. Nachdem ich gesagt habe, dass mein Wissen über HTTP-Antworten nicht gut ist, vermisse ich vielleicht etwas ... – Cerzi

Verwandte Themen