webapp include classi di gestione delle richieste per l'utilizzo dell'API Blobstore. BlobstoreUploadHandler
fornisce la logica per analizzare la richiesta di caricamento trasmessa tramite Blobstore in
record BlobInfo
per l'ulteriore elaborazione. BlobstoreDownloadHandler
semplifica la pubblicazione
dei valori Blobstore da qualsiasi percorso.
BlobstoreUploadHandler
I valori vengono aggiunti a Blobstore tramite i caricamenti di file pubblicati dagli utenti o dagli amministratori dell'app.
L'app pubblica un modulo web con un campo di caricamento dei file e un'azione del modulo che indirizza il caricamento a
Blobstore. L'app ottiene l'URL dell'azione del modulo chiamando una funzione
(create_upload_url()),
passando l'URL di un gestore dell'app che viene chiamato quando gli utenti caricano i file. Un'applicazione webapp
può utilizzare una sottoclasse della classe BlobstoreUploadHandler
come gestore per
questo URL.
Il metodo get_uploads()
restituisce un elenco di oggetti BlobInfo, uno per ogni file caricato nella richiesta. Ogni oggetto contiene la chiave Blobstore per
il valore caricato, nonché metadati come il nome e le dimensioni del file. Ogni file caricato ha anche
un'entità corrispondente nel datastore con queste informazioni, in modo da poter recuperare l'oggetto BlobInfo
in un secondo momento data una chiave blob o eseguire una query datastore sui campi dei metadati. Il gestore
di caricamento analizza queste informazioni direttamente dai dati della richiesta, non dal datastore.
Per impostazione predefinita, get_uploads()
restituisce oggetti BlobInfo per tutti i file caricati nella richiesta. Il metodo accetta anche un argomento field_name
per ottenere solo il file (o
i file) per un determinato campo di caricamento dei file. Il valore restituito è sempre un elenco, possibilmente vuoto.
Utilizzo di BlobstoreUploadHandler
con Google Cloud Storage
Se utilizzi questo gestore di caricamento con Cloud Storage, devi recuperare e archiviare il nome file completo dell'oggetto Cloud Storage, poiché è necessario per recuperare nuovamente il file da Cloud Storage.
Utilizza la funzione get_file_infos
, che restituisce un elenco di record FileInfo corrispondenti a ogni caricamento. Il nome completo dell'oggetto Cloud Storage, il tipo di contenuti, l'ora di creazione e altri dati sono disponibili in FileInfo
. Per informazioni dettagliate, visita il link.
BlobstoreDownloadHandler
Per pubblicare un valore Blobstore, l'applicazione imposta l'intestazione X-AppEngine-BlobKey
sul valore di una chiave Blobstore, in formato stringa. Quando App Engine vede questa intestazione nella risposta,
utilizza il valore del blob come corpo della risposta. La classe del gestore di app web
BlobstoreDownloadHandler
semplifica l'impostazione di questo valore nella risposta.
Il metodo send_blob()
accetta un oggetto
BlobKey, una chiave stringa o un oggetto
BlobInfo come argomento blob_key_or_info
e imposta i dati di risposta in modo che il valore del blob
venga inviato all'utente. Il metodo accetta un argomento content_type
facoltativo che
override del tipo di contenuti MIME del valore del blob archiviato. Per impostazione predefinita, il blob viene pubblicato con il tipo di contenuti impostato dal client che lo ha caricato, un tipo di contenuti derivato dal nome file o un tipo generico se non sono disponibili altre informazioni sul tipo.
Il metodo send_blob()
accetta un argomento save_as
che determina
se i dati del blob vengono inviati come dati di risposta non elaborati o come allegato MIME con un nome file. Se
l'argomento è una stringa, il blob viene inviato come allegato e il valore della stringa viene utilizzato come
nome file. Se True
e blob_key_or_info
sono un oggetto BlobInfo
, viene utilizzato il nome file dell'oggetto. Per impostazione predefinita, i dati blob vengono inviati come corpo
della risposta e non come allegato MIME.
Blobstore supporta l'invio solo di una parte di un valore anziché del valore completo, descritto come un intervallo di indici di byte. Puoi fornire un intervallo di indici di byte al metodo send_blob()
di BlobstoreDownloadHandler
in due modi. Il primo consiste nello specificare l'intervallo come argomenti start
e end
:
# Send the first 1,000 bytes of the value. self.send_blob(key, start=0, end=999)
Per impostazione predefinita, BlobstoreDownloadHandler
rispetta l'intestazione range
nella richiesta. Se vuoi bloccare l'utilizzo dell'intestazione Range originale, fornisci il parametro use_range=False
a send_blob()
:
# Send the full value of the blob and # block the "range" header. self.send_blob(key, use_range=False)
Il valore dell'intestazione range
è un intervallo di byte HTTP standard. BlobstoreDownloadHandler
utilizza webob.byterange per analizzare il valore di questo header.
Applicazione di esempio completa
Nell'applicazione di esempio seguente, l'URL principale dell'applicazione carica il modulo che chiede all'utente un file da caricare e il gestore di caricamento chiama immediatamente il gestore di download per pubblicare i dati. per semplificare l'applicazione di esempio. In pratica, probabilmente non utilizzeresti l'URL principale per richiedere i dati di caricamento e non pubblicheresti immediatamente un blob appena caricato.