Présentation de l'API Blobstore pour les anciens services groupés

L'API Blobstore permet à votre application de diffuser des objets de données, appelés blobs, beaucoup plus volumineux que la taille autorisée pour les objets dans le service Datastore. Les blobs sont particulièrement utiles pour la diffusion de fichiers de grande taille, tels que des fichiers vidéo ou image, ainsi que pour l'importation de fichiers de données volumineux. Les blobs sont générés lors de l'importation d'un fichier via une requête HTTP. Pour ce faire, vos applications présentent généralement à l'utilisateur un formulaire avec un champ d'importation de fichier. Une fois ce formulaire envoyé, le blobstore crée un blob à partir du contenu du fichier et renvoie une référence opaque au blob, appelée clé blob, que vous pouvez ensuite utiliser pour diffuser le blob. L'application peut diffuser la valeur complète du blob en réponse à une demande d'utilisateur. Elle peut aussi lire directement la valeur à l'aide d'une interface de type fichier de streaming.

Présentation du Blobstore

App Engine inclut le service Blobstore, qui permet aux applications de diffuser des objets de données limités uniquement par la quantité de données pouvant être importées ou téléchargées via une seule connexion HTTP. Ces objets sont appelés valeurs Blobstore ou objets blob. Les valeurs Blobstore sont diffusées en tant que réponses par des gestionnaires de requêtes et créées en tant qu'importations via des formulaires Web. Les applications ne créent pas directement de données blob. En effet, les blobs sont créés indirectement, par un formulaire Web envoyé ou par une autre requête HTTP POST. Les valeurs Blobstore peuvent être diffusées auprès de l'utilisateur et sont accessibles par l'application dans un flux de type fichier, à l'aide de l'API Blobstore.

Pour inviter un utilisateur à importer une valeur Blobstore, votre application présente un formulaire Web avec un champ d'importation de fichier. L'application génère l'URL d'action du formulaire en appelant l'API Blobstore. Le navigateur de l'utilisateur importe le fichier directement dans le Blobstore via l'URL générée. Blobstore stocke ensuite le blob, réécrit la requête de manière à inclure la clé blob et la transmet à un chemin d'accès dans votre application. Un gestionnaire de requêtes situé sur ce chemin dans votre application peut alors procéder au traitement approfondi du formulaire.

Pour diffuser un blob, votre application définit un en-tête sur la réponse sortante et App Engine remplace la réponse par la valeur du blob.

Une fois créés, les objets blob ne peuvent pas être modifiés. Cependant, ils peuvent être supprimés. Chaque blob est associé à un enregistrement d'informations, stocké dans le datastore. Cet enregistrement fournit des détails, tels que la date de création et le type de contenu de ce blob. Vous pouvez utiliser la clé blob pour récupérer des enregistrements d'informations sur les blobs et interroger leurs propriétés.

Utilisation du Blobstore

Les applications peuvent utiliser le Blobstore pour accepter l'importation des fichiers volumineux par les utilisateurs et pour diffuser ces fichiers. Une fois importés, les fichiers sont appelés des objets blob. Les applications n'accèdent pas directement aux blobsElles utilisent plutôt les blobs via des entités d'informations de blobs (représentées par la classe ) dans le datastore.

L'utilisateur crée un blob en soumettant un formulaire HTML qui inclut un ou plusieurs champs de saisie de fichiers. Votre application définir comme destination (action) de ce formulaire, en transmettant à la fonction le chemin d'URL d'un gestionnaire dans votre application. Lorsque l'utilisateur envoie le formulaire, son navigateur transfère directement les fichiers indiqués au service Blobstore. Le service Blobstore réécrit la requête de l'utilisateur et stocke les données des fichiers importés, en les remplaçant par une ou plusieurs clés blob correspondantes. Il transmet ensuite la requête ainsi modifiée au gestionnaire au chemin d'URL que vous avez fourni à la fonction .

Ce gestionnaire peut procéder à un traitement supplémentaire en fonction de la clé blob.

L'application peut lire des portions d'une valeur Blobstore à l'aide d'une

Importer un blob

Pour créer et importer un objet blob, suivez la procédure suivante :

1. Créez une URL d'importation

Appelez pour créer une URL d'importation pour le formulaire destiné à l'utilisateur, en transmettant le chemin d'accès de l'application à charger lorsque la requête POST du formulaire est terminée.

upload_url = blobstore.create_upload_url("/upload_photo")

Il existe une version asynchrone, create_upload_url_async(). Elle permet au code de votre application de continuer à s'exécuter pendant que Blobstore génère l'URL d'importation.

2. Créez un formulaire d'importation

Le formulaire doit inclure un champ d'importation de fichiers et le enctype du formulaire doit être défini sur multipart/form-data. Lorsque l'utilisateur envoie le formulaire, la requête POST est traitée par l'API Blobstore, ce qui entraîne la création du blob. L'API crée également un enregistrement d'informations pour le blob et le stocke dans le datastore. Elle transmet ensuite la requête réécrite à votre application au chemin fourni en tant que clé blob.

Vous ne pouvez pas utiliser un équilibreur de charge d'application externe global avec un NEG sans serveur pour gérer les requêtes d'importation envoyées à l'URL /_ah/upload/ renvoyée par l'appel blobstore.create_upload_url. Au lieu de cela, vous devez acheminer ces requêtes d'importation directement vers le service App Engine. Pour ce faire, vous pouvez utiliser le domaine appspot.com ou un domaine personnalisé mappé directement au service App Engine.

3. Implémentez le gestionnaire d'importation

Dans ce gestionnaire, vous pouvez stocker la clé blob avec le reste du modèle de données de l'application. La clé blob elle-même reste accessible à partir de l'entité d'informations sur le blob dans le datastore. Notez qu'une fois que l'utilisateur a soumis le formulaire et que votre gestionnaire a été appelé, le blob a déjà été sauvegardé et les informations associées ajoutées au datastore. Si votre application ne souhaite pas conserver le blob, vous devez le supprimer immédiatement pour éviter qu'il ne devienne orphelin.

Pour toutes les applications Flask, les appels passés aux méthodes dans la classe BlobstoreUploadHandler nécessitent le dictionnaire request.environ dictionary (requête importée à partir du module Flask). Si votre application est une application WSGI sans framework Web, utilisez le paramètre environ dans la méthode get_uploads(). Lorsque le service Blobstore réécrit la requête de l'utilisateur, il vide les parties MIME des fichiers importés et ajoute la clé blob en tant qu'en-tête de la partie MIME. Blobstore préserve tous les autres champs et parties du formulaire, et les transmet au gestionnaire de transferts. Si vous ne spécifiez pas de type de contenu, le Blobstore tentera de l'inférer à partir de l'extension du fichier. S'il ne peut pas déterminer de type de contenu, il attribue le type de contenu application/octet-stream à l'objet blob nouvellement créé.

Diffuser un blob

Pour diffuser des blobs, vous devez inclure un gestionnaire de téléchargement de blob en tant que chemin d'accès dans votre application. Ce gestionnaire doit transmettre la clé blob pour le blob souhaité dans blobstore.Send .