L'API Blobstore consente alla tua applicazione di gestire oggetti di dati, chiamati blob,molto più grandi delle dimensioni consentite per gli oggetti nel servizio Datastore. I BLOB sono utili per pubblicare file di grandi dimensioni, come file video o immagine, e per consentire agli utenti di caricare file di dati di grandi dimensioni. I blob vengono creati caricando un file tramite una richiesta HTTP. In genere, le tue applicazioni lo fanno presentando un modulo con un campo di caricamento dei file all'utente. Quando il modulo viene inviato, Blobstore crea un blob dai contenuti del file e restituisce un riferimento opaco al blob, chiamato chiave blob,che puoi utilizzare in un secondo momento per pubblicare il blob. L'applicazione può pubblicare il valore blob completo in risposta a una richiesta dell'utente oppure può leggere il valore direttamente utilizzando un'interfaccia di tipo file di streaming.
Ti presentiamo Blobstore
App Engine include il servizio Blobstore, che consente alle applicazioni di gestire
oggetti di dati limitati solo dalla quantità di dati che possono essere caricati o scaricati
tramite una singola connessione HTTP. Questi oggetti sono chiamati valori Blobstore o blob.
I valori di Blobstore vengono forniti come risposte dai gestori delle richieste e vengono creati
come caricamenti tramite moduli web. Le applicazioni non creano direttamente dati blob; i blob vengono creati indirettamente, tramite un modulo web inviato o un'altra richiesta HTTP POST
.
I valori di Blobstore possono essere forniti all'utente o accessibili dall'applicazione in un flusso simile a un file utilizzando l'API Blobstore.
Per chiedere a un utente di caricare un valore Blobstore, la tua applicazione presenta un modulo web con un campo di caricamento dei file. L'applicazione genera l'URL di azione del modulo chiamando l'API Blobstore. Il browser dell'utente carica il file direttamente in Blobstore tramite l'URL generato. Blobstore archivia quindi il blob, riscrive la richiesta in modo che contenga la chiave blob e la passa a un percorso nella tua applicazione. Un gestore delle richieste in quel percorso dell'applicazione può eseguire un'ulteriore elaborazione del modulo.
Per pubblicare un blob, la tua applicazione imposta un'intestazione nella risposta in uscita e App Engine sostituisce la risposta con il valore del blob.
I blob non possono essere modificati dopo la creazione, ma possono essere eliminati. A ogni blob corrisponde un record di informazioni sul blob, archiviato nel datastore, che fornisce dettagli sul blob, come l'ora di creazione e il tipo di contenuto. Puoi utilizzare la chiave blob per recuperare i record di informazioni sui blob ed eseguire query sulle relative proprietà.
Utilizzo di Blobstore
Le applicazioni possono utilizzare Blobstore per accettare file di grandi dimensioni come caricamenti da parte degli utenti e per pubblicarli. Una volta caricati, i file vengono chiamati blob. Le applicazioni non accedono direttamente ai blob, invece, le applicazioni funzionano con i blob tramite le entità di informazioni sui blob (rappresentate dalla classe ) nel datastore.
L'utente crea un blob inviando un modulo HTML che includa uno o più campi di immissione file. La tua applicazione set come il percorso (l’azione) del modulo dell'applicazione, passando per il percorso di un URL. Quando l'utente invia il modulo, il browser dell'utente carica i file specificati direttamente in Blobstore. Il Blobstore riscrive la richiesta dell'utente e archivia i dati del file caricato, sostituendo i dati del file caricato con una o più chiavi blob corrispondenti, quindi passa la richiesta riscritta al gestore nel percorso dell'URL che hai fornito a .
Questo gestore può eseguire un'elaborazione aggiuntiva in base alla chiave blob.
L'applicazione può leggere porzioni di un valore Blobstore utilizzando un'interfaccia di streaming simile a un file
Caricamento di un blob
Per creare e caricare un blob:
1. Creare un URL di caricamento
Chiama
per creare un URL di caricamento per il modulo che l'utente compilerà,
passando il percorso dell'applicazione da caricare al termine del POST
del modulo.
Esiste una versione asincrona, create_upload_url_async()
. Consente al codice dell'applicazione di continuare a essere eseguito mentre Blobstore genera l'URL di caricamento.
2. Creare un modulo di caricamento
Il modulo deve includere un campo di caricamento dei file e il enctype
del modulo deve essere impostato su
multipart/form-data
. Quando l'utente invia il modulo, POST
viene gestito dall'API Blobstore, che crea il blob. L'API crea anche un record di informazioni per il
blob, lo archivia in Datastore e passa la richiesta riscritta alla tua applicazione nel percorso specificato come chiave blob.
Non puoi utilizzare un bilanciatore del carico delle applicazioni esterno globale con un NEG serverless per gestire le richieste di caricamento inviate all'URL /_ah/upload/
restituito dalla chiamata blobstore.create_upload_url
.
Devi invece indirizzare queste richieste di caricamento direttamente al servizio App Engine. Puoi farlo utilizzando il dominio appspot.com
o un dominio personalizzato mappato direttamente al servizio App Engine.
3. Implementa il gestore di caricamento
In questo gestore puoi memorizzare la chiave blob con il resto del modello dei dati dell'applicazione. La chiave del blob rimane accessibile dall'entità delle informazioni sul blob in Datastore. Tieni presente che dopo l'invio del modulo da parte dell'utente e la chiamata al gestore, il blob è già stato salvato e le informazioni sul blob sono state aggiunte al datastore. Se la tua applicazione non vuole conservare il blob, devi eliminarlo immediatamente per impedirne l'isolamento.
Per tutte le app Flask, tutte le chiamate effettuate ai metodi della classeBlobstoreUploadHandler
richiedono request.environ dictionary
(la richiesta viene importata dal modulo Flask). Se la tua app è un'app WSGI senza un framework web, utilizza il
parametro environ
nel metodo get_uploads()
.
Quando riscrive la richiesta dell'utente, Blobstore svuota le parti MIME dei file caricati e aggiunge la chiave blob come intestazione della parte MIME. Blobstore
conserva tutti gli altri campi e le altre parti del modulo, passandoli al gestore di caricamento.
Se non specifichi un tipo di contenuti, Blobstore tenterà di dedurlo dall'estensione del file. Se non riesce a determinare un tipo di contenuti, assegna il tipo di contenuti application/octet-stream
al blob appena creato.
Pubblicazione di un blob
Per pubblicare i blob, devi includere un gestore di download dei blob come percorso nella tua applicazione.
. Questo gestore deve passare la chiave blob per il blob desiderato a blobstore.Send
.