Die Blobstore API ermöglicht einer Anwendung, als Blobs bezeichnete Datenobjekte bereitzustellen, deren Größe die im Datastore-Dienst zulässige maximale Objektgröße bei Weitem überschreitet. Blobs sind hilfreich, um große Dateien bereitzustellen, z. B. Video- oder Bilddateien, und um Nutzern das Hochladen großer Datendateien zu ermöglichen. Blobs werden durch Hochladen einer Datei über eine HTTP-Anfrage erstellt. Dazu wird dem Nutzer in der Regel in der Anwendung ein Formular mit einem entsprechenden Feld angezeigt. Wenn das Formular gesendet wird, erstellt Blobstore aus den Dateiinhalten ein Blob und gibt eine intransparente Referenz zurück. Diese wird als Blob-Schlüssel bezeichnet und Sie können sie später zum Bereitstellen des Blobs verwenden. Die Anwendung kann als Antwort auf eine Nutzeranfrage den vollständigen Blob-Wert bereitstellen oder den Wert über eine dateiähnliche Streaming-Schnittstelle lesen.
Einführung in Blobstore
App Engine enthält den Blobstore-Dienst, mit dem Anwendungen sehr große Datenobjekte bereitstellen können. Die Größe ist nur durch die Datenmenge begrenzt, die über eine einzelne HTTP-Verbindung hoch- bzw. heruntergeladen werden kann. Diese Objekte heißen Blobstore-Werte oder Blobs.
Ein Blobstore-Wert wird als Antwort eines Anfrage-Handlers bereitgestellt und als Upload über ein Webformular erstellt. Blob-Daten werden von Anwendungen nicht direkt erstellt. Stattdessen werden Blobs indirekt über ein Webformular oder eine andere POST
-HTTP-Anfrage angelegt.
Mithilfe der Blobstore API können Blobstore-Werte dem Nutzer bereitgestellt oder von der Anwendung in einem dateiähnlichen Stream abgerufen werden.
In der Anwendung wird ein Webformular mit einem Feld zum Dateiupload angezeigt, über das der Nutzer einen Blobstore-Wert hochladen kann. Die Anwendung ruft die Blobstore API auf und generiert damit die Aktions-URL des Formulars. Im Browser des Nutzers wird die Datei über die generierte URL direkt in Blobstore hochgeladen. Blobstore speichert das Blob, fügt den Blob-Schlüssel in die Anfrage ein und übergibt ihn an einen Pfad in Ihrer Anwendung. Ein Anfrage-Handler unter diesem Anwendungspfad kann das Formular dann weiter verarbeiten.
Zum Bereitstellen eines Blobs legt die Anwendung einen Header für die ausgehende Antwort fest und App Engine ersetzt die Antwort durch den Blob-Wert.
Nach ihrer Erstellung können Blobs nicht mehr geändert, aber gelöscht werden. Für jedes Blob wird im Datenspeicher ein Blob-Informationseintrag angelegt, der Details zum Blob enthält (z. B. Erstellungszeitpunkt und Inhaltstyp). Sie können den Blob-Schlüssel verwenden, um Blob-Informationseinträge abzurufen und die enthaltenen Properties abzufragen.
Blobstore verwenden
Anwendungen können mit Blobstore große Dateien, die von Nutzern hochgeladen werden, verarbeiten und bereitstellen. Sobald sie hochgeladen wurden, werden diese Dateien als Blobs bezeichnet. Anwendungen greifen nicht direktauf Blobs.Anwendungen arbeiten mit Blobs über Blob-Informationsentitäten (dargestellt durch die Klasse ) im Datastore.
Der Nutzer erstellt ein Blob, indem er ein HTML-Formular mit einem oder mehreren Dateieingabefeldern sendet. Ihre Anwendung legt als das Ziel (Aktion) dieses Formulars fest, wobei der Funktion ein URL-Pfad eines Handlers in der Anwendung übergeben wird. Sendet der Nutzer das Formular ab, lädt der Browser die angegebenen Dateien direkt in Blobstore hoch. Der Blobstore schreibt die Nutzeranfrage um, speichert die hochgeladenen Dateidaten und ersetzt sie durch einen oder mehrere Blob-Schlüssel. Anschließend wird die geänderte Anfrage an den Anfrage-Handler in dem URL-Pfad übergeben, den Sie in angegeben haben.
Der Handler kann auf Grundlage des Blob-Schlüssels weitere Verarbeitungsschritte ausführen.
Die Anwendung kann Teile eines Blobstore-Werts mithilfe einer
Blob hochladen
Gehen Sie beim Erstellen und Hochladen eines Blobs folgendermaßen vor:
1. Upload-URL erstellen
Rufen Sie
auf, um eine Upload-URL für das Formular zu erstellen, das vom Nutzer ausgefüllt wird. Dabei wird der Anwendungspfad übergeben, der nach Fertigstellung des POST
des Formulars geladen werden soll.
Es gibt eine asynchrone Version, create_upload_url_async()
. Mit dieser Version kann der Anwendungscode weiterhin ausgeführt werden, während Blobstore die Upload-URL generiert.
2. Uploadformular erstellen
Das Formular muss ein Feld für das Hochladen von Dateien enthalten und der enctype
des Formulars muss auf multipart/form-data
festgelegt sein. Wenn der Nutzer das Formular absendet, wird der POST
von der Blobstore API verarbeitet, die das Blob erstellt. Die API erstellt auch den Informationseintrag für das Blob und speichert ihm Datenspeicher. Außerdem übergibt sie die umgeschriebene Anfrage als Blob-Schlüssel unter dem angegebenen Pfad an die Anwendung.
Sie können keinen globalen externen Application Load Balancer mit einer serverlosen NEG verwenden, um Uploadanfragen zu verarbeiten, die an die /_ah/upload/
-URL gesendet werden, die vom blobstore.create_upload_url
-Aufruf zurückgegeben wird.
Stattdessen müssen Sie diese Uploadanfragen direkt an den App Engine-Dienst weiterleiten. Dazu können Sie entweder die appspot.com
-Domain oder eine benutzerdefinierte Domain verwenden, die direkt dem App Engine-Dienst zugeordnet ist.
3. Upload-Handler implementieren
In diesem Handler können Sie den Blob-Schlüssel zusammen mit dem restlichen Datenmodell der Anwendung speichern. Auf den Blob-Schlüssel selbst lässt sich über die Blob-Informationsentität im Datenspeicher zugreifen. Beachten Sie, dass das Blob bereits gespeichert und die Blob-Informationen dem Datenspeicher hinzugefügt wurden, nachdem der Nutzer das Formular gesendet hat und der Handler aufgerufen wurde. Wenn die Anwendung das Blob nicht mehr benötigt, sollten Sie es sofort löschen, damit es nicht verwaist.
Für alle Flask-Anwendungen erfordern alle Aufrufe von Methoden der KlasseBlobstoreUploadHandler
die Parameter request.environ dictionary
(Anfrage wird aus dem Flask-Modul importiert). Wenn Ihre Anwendung eine WSGI-Anwendung ohne Web-Framework ist, verwenden Sie den Parameter environ
in der Methode get_uploads()
.
Wenn der Blobstore die Nutzeranfrage neu schreibt, wird der Text in den MIME-Teilen der hochgeladenen Dateien gelöscht und der Blob-Schlüssel wird als Header für die MIME-Teile hinzugefügt. Der Blobstore behält alle anderen Formularfelder und Teile bei und übergibt sie an den Upload-Handler.
Wenn Sie keinen Inhaltstyp angeben, versucht Blobstore, ihn von der Dateierweiterung abzuleiten. Wenn kein Inhaltstyp ermittelt werden kann, wird dem neu erstellten Blob der Inhaltstyp application/octet-stream
zugewiesen.
Blob bereitstellen
Um Blobs bereitzustellen, müssen Sie in der Anwendung einen Blob-Download-Handler als Pfad angeben.
Dieser Handler sollte den Blob-Schlüssel für den gewünschten Blob an blobstore.Send
übergeben.