Klares Beispiel für die Verwendung der Google App Engine Bilder get_serving_url()
Weiß jeder, der ein Beispiel dafür? Ich habe nicht in der Lage zu finden in der Google-Dokumentation.
- Sind Ihre Bezugnahme auf die Verwendung Blobstore?
- Ja? Gibt es einen Unterschied zwischen den BlobStore und speichern von Bildern in den datenspeicher als BlobProperty?
- NÖ. Frage mich, warum Sie wurden speziell zu erwähnen Bilder.
- Das einzige Beispiel, das ich gefunden habe, ist eine, wo alles, was Sie tun, ist laden Sie ein Bild zum blobStore. ex: code.google.com/appengine/docs/python/blobstore/overview.html ich Suche ein Beispiel, dass funktioniert über ein Modell und BlobProperty
- Natürlich gibt es einen Unterschied.
- BlobProperty ist für die Lagerung von kleinen blobs von Daten neben ein Datensatz in den datenspeicher. Das ist völlig getrennt von der blobstore, die speichert große Dateien separat.
- Nur BlobStore kann die Arbeit mit get_serving_url() und es ist sehr bequem. Mit BlobProperty, die völlig Verschieden ist von blobStore, können Sie nur Bilder kleiner als 1MB und kann den Einsatz mit get_serving_url().
Du musst angemeldet sein, um einen Kommentar abzugeben.
get_serving_url
dokumentiert ist hier. Es gibt keine Ende-zu-Ende Beispiel pro-se, aber es ist ziemlich einfach: Sie übergeben Sie ein blob-key, zusammen mit optional resize und crop-Optionen, und es gibt Sie wieder eine URL. Sie können die URL, wohin Sie wollen, auf das Bild verweisen, und es wird serviert von der Infrastruktur, in der Größe verändert und beschnitten entsprechend.Beachten Sie, dass dies nur für Bilder hochgeladen, um die blobstore. Alles hochgeladen, um die regelmäßige datastore gespeichert und in ein
BlobProperty
Sie müssen zum ändern der Größe, beschneiden und sich selbst bedienen.Trotz der Dokumentation, Ich war ziemlich verwirrt für eine Weile zu.
Nun, dass ich es besser verstehen (denke ich!), Ich werde das an einem Beispiel.
get_serving_url()
ist in dergoogle.appengine.ext.blobstore
Klasse, und nimmt man die positionelle argument, dieBlobKey
.Einen
BlobKey
konstruiert werden können, die aus einem string:blobstore.BlobKey('this is the key')
.So, dass uns alles, was wir brauchen für eine grundlegende Implementierung
get_serving_url()
:Alles schön und gut so weit.
Die Funktion nimmt auch drei keyword-Argumente, wie dokumentiert. Diese sind
size
,crop
,secure_url
, undrpc
.secure_url = True
gibt einfach einhttps
url statthttp
(StandardFalse
)rpc
ist einRPC
Objekt der einige Einstellungen für die asynchrone Verarbeitung. Ich verstehe es nicht genug, zu erklären, oder tatsächlich um ihn selbst zu benutzen!crop = True
schneidet das Bild Platz sogar Proportionen.size
ist, was verwirrt mich zunächst. Es nicht erzeugen unterschiedliche URLs per se. Der einzige Unterschied ist das suffix=sXX
, die Sie sich selbst gesteckt haben.Persönlich Lagere ich die original Größe-URL in meinem
db.Model
, und dann tunimgUrl+'=s150'
(zum Beispiel) wo auch immer verwendet. Es gibt keine Notwendigkeit, rufen Sieget_serving_url()
für jede Größe, die Sie brauchen, keine Leistungseinbußen, weil es genau das tut.Beachten Sie auch, dass die angegebene Größe ist die grösste dimension des Bildes. Dies ist eine seltsam versteckt in den docs - ich vermutet, es muss in der Breite für eine Weile, aber wenn das Bild 'Porträt', ist es natürlich die Höhe.
Können Sie auch Anhängen
-c
(entsprichtcrop=True
).So, für unsere mehr komplett (wenn ich das wissen fehlt, um zu demonstrieren, verwenden eines
RPC
Objekt) Beispiel:Diese URL ' s können dann gespeichert werden in den Datastore-egal in welchem Modell sind Sie relevant. Diese ist bevorzugt über die Verwendung von völlig anders
db.BlobProperty
, was nicht wirklich für die Bilder an alle. Es ist auch teurer und weniger effizient.Natürlich, ich schlage vor, Sie speichern nur
url
(wie oben), weil es so einfach zu ändern die Größe, indem suffixing den string! In der Tat, es ist etwas, das man wirklich nur tun, in Ihrem Jinja-Vorlage (oder gleichwertig) - wo würden Sie wohl auch sonst angebenwidth=
und Ernte zu tun haben in CSS die gleiche.Ich habe mit dem folgenden code, um Bilder hochzuladen und dann servieren Sie Sie mit dem CDN. Bitte Lesen Sie die Kommentare in den code für die Erklärung.
Hier sind die model-Klassen
Lassen Sie mich wissen, wenn irgendetwas ist hier nicht klar.
War ich auch sehr verwirrt, da bei google nicht wirklich eine funktionierende Beispiel des getServingUrl() für JAVA-Programmierer - Ollie, ich denke, dass der Beispiel-code, den Sie oben gegeben habe, ist in Python?
Habe ich einige der Codierung, um zu sehen, wie es funktioniert und hier ist ein funktionierendes code-snippet in java (man kann leicht nehmen Sie das Beispiel von google ' s site: https://cloud.google.com/appengine/docs/java/blobstore/ und ersetzen Sie den code unter dem Serve.java mit diesem Stück code):
Dadurch wird das Bild, das Sie haben post in Ihrem blobstore, es beschneiden, so dass es wird ein schöner Platz mit 200 als seine Breite und Höhe, und dann drucken Sie es aus in HTML, so dass Sie sehen können die Miniaturansicht.
Hoffe, dies hilft jemand da draußen!