webapp include classi di gestori delle richieste per lavorare con
API Blobstore. BlobstoreUploadHandler
fornisce la logica per analizzare la richiesta di caricamento passata tramite l'archivio BLOB in
BlobInfo
per un'ulteriore elaborazione. BlobstoreDownloadHandler
semplifica il servizio
dei valori di Blobstore da qualsiasi percorso.
BlobstoreUploadHandler
I valori vengono aggiunti all'archivio BLOB tramite i caricamenti di file pubblicati dagli utenti o dagli amministratori dell'app.
L'app pubblica un modulo web con un campo per il caricamento di file e un'azione del modulo che indirizza il caricamento alla
Archivio BLOB. L'app ottiene l'URL dell'azione del modulo chiamando una funzione
(create_upload_url()),
passando l'URL di un gestore di app che viene chiamato quando gli utenti caricano file. Un'app web
un'applicazione può utilizzare una sottoclasse della classe BlobstoreUploadHandler
come gestore
questo URL.
Il metodo get_uploads()
restituisce un elenco di
BlobInfo
uno per ogni file caricato nella richiesta. Ogni oggetto contiene la chiave dell'archivio BLOB
il valore caricato, nonché metadati come il nome e le dimensioni del file. Ogni file caricato
ha un'entità corrispondente nel datastore con queste informazioni, quindi puoi recuperare le informazioni BlobInfo
in un secondo momento, tramite una chiave BLOB oppure eseguire una query sul datastore sui campi dei metadati. Il gestore del 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
file) per un determinato campo di caricamento file. Il valore restituito è sempre un elenco, eventualmente vuoto.
Utilizzo di BlobstoreUploadHandler
con Google Cloud Storage
Se utilizzi questo gestore dei caricamenti con Cloud Storage, devi recuperare e memorizzare il nome file completo dell'oggetto Cloud Storage, poiché è necessario per recuperare di nuovo 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 contenuto e la creazione
ora e altri dati sono disponibili nell'FileInfo
. (Per informazioni dettagliate, visita il link.)
BlobstoreDownloadHandler
Per pubblicare un valore dell'archivio BLOB, l'applicazione imposta l'intestazione X-AppEngine-BlobKey
sul valore di una chiave dell'archivio BLOB in formato stringa. Quando App Engine vede questa intestazione nella risposta,
serve il valore del blob come corpo della risposta. La classe di gestore della web app
BlobstoreDownloadHandler
semplifica l'impostazione di questo valore nella risposta.
Il metodo send_blob()
accetta un oggetto BlobKey, una chiave di 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 fornito all'utente. Il metodo accetta un argomento facoltativo content_type
che aggira il tipo di contenuti MIME del valore del blob archiviato. Per impostazione predefinita, il blob viene pubblicato con
un tipo di contenuti impostato dal client che li ha caricati, un tipo di contenuti derivato dal nome del file o un
di 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
il nome del file. Se True
e blob_key_or_info
è un BlobInfo
, viene utilizzato il nome file dell'oggetto. Per impostazione predefinita, i dati del blob vengono inviati come corpo del
la risposta e non come allegato MIME.
Blobstore supporta l'invio di solo una parte di un valore anziché del valore completo, descritto come un intervallo di indici di byte. Puoi fornire un intervallo di indice di byte al metodo send_blob()
di BlobstoreDownloadHandler
in due modi. La prima 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'uso dell'intestazione dell'intervallo 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 questo valore dell'intestazione.
Completa l'applicazione di esempio
Nella seguente applicazione di esempio, l'URL principale dell'applicazione carica il modulo che chiede all'utente di caricare un file e il gestore del caricamento chiama immediatamente il gestore del download per pubblicare i dati. Questo per semplificare l'applicazione di esempio. In pratica, probabilmente non utilizzerai l'URL principale per richiedere i dati di caricamento né pubblicherai immediatamente un blob appena caricato.