Google Cloud Storage gestione di file e oggetti

Nella prima parte di questa serie di tutorial in due parti, abbiamo avuto una panoramica di come vengono utilizzati i bucket su Google Cloud Storage per organizzare i file. Abbiamo visto come gestire i bucket su Google Cloud Storage da Google Cloud Console. Questo è stato seguito da uno script Python in cui queste operazioni sono state eseguite a livello di programmazione.

In questa parte, mostrerò come gestire oggetti, ovvero file e cartelle all'interno di bucket GCS. La struttura di questo tutorial sarà simile a quella del precedente. Innanzitutto dimostrerò come eseguire le operazioni di base relative alla gestione dei file utilizzando Google Cloud Console. Questo sarà seguito da uno script Python per eseguire le stesse operazioni a livello di programmazione.

Proprio come la denominazione dei bucket in GCS aveva alcune linee guida e vincoli, la denominazione degli oggetti segue anche una serie di linee guida. I nomi degli oggetti devono contenere caratteri Unicode validi e non devono contenere caratteri Carriage Return o Line Feed. Alcuni consigli includono di non avere caratteri come "#", "[", "]", "*", "?" o caratteri di controllo XML illegali perché possono essere interpretati in modo errato e possono portare ad ambiguità.

Inoltre, i nomi degli oggetti in GCS seguono uno spazio dei nomi piatto. Ciò significa che fisicamente non ci sono directory e sottodirectory su GCS. Ad esempio, se si crea un file con nome /tutsplus/tutorials/gcs.pdf, sembrerà come se gcs.pdf risiede in una directory chiamata tutorial che a sua volta è una sottodirectory di tutsplus. Ma secondo GCS, l'oggetto risiede semplicemente in un secchio con il nome /tutsplus/tutorials/gcs.pdf.

Diamo un'occhiata a come gestire gli oggetti usando Google Cloud Console e poi saltiamo sullo script Python per fare la stessa cosa a livello di programmazione.

Utilizzo di Google Cloud Console

Continuerò da dove siamo partiti nell'ultimo tutorial. Iniziamo creando una cartella.


Per creare una nuova cartella, fare clic su Creare una cartella pulsante evidenziato sopra. Creare una cartella compilando il nome desiderato come mostrato di seguito. Il nome dovrebbe seguire le convenzioni di denominazione degli oggetti.

Ora carichiamo un file nella cartella appena creata.

Dopo la creazione, il browser GCS elencherà gli oggetti appena creati. Gli oggetti possono essere cancellati selezionandoli dall'elenco e facendo clic sul pulsante Elimina.


Facendo clic sul pulsante di aggiornamento, l'interfaccia utente verrà popolata con qualsiasi modifica all'elenco di oggetti senza aggiornare l'intera pagina.

Gestione degli oggetti a livello di programmazione

Nella prima parte, abbiamo visto come creare un'istanza di Compute Engine. Userò lo stesso qui e costruirò lo script Python dell'ultima parte.

Scrivere lo script Python

Non ci sono passaggi di installazione aggiuntivi che devono essere seguiti per questo tutorial. Fare riferimento alla prima parte per ulteriori dettagli sull'installazione o sull'ambiente di sviluppo.

gcs_objects.py

import sys dal pprint di importazione pprint da googleapiclient discovery discovery da googleapiclient import http da oauth2client.client import GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ('storage', 'v1', credentials = credentials) def list_objects (bucket): service = create_service () # Crea una richiesta a objects.list per recuperare un elenco di oggetti. fields_to_return = \ 'nextPageToken, items (nome, dimensione, contentType, metadata (my-key))' req = service.objects (). lista (bucket = bucket, fields = fields_to_return) all_objects = [] # Se ne hai troppi elementi da elencare in una richiesta, list_next () # gestisce automaticamente il paging con pageToken. while req: resp = req.execute () all_objects.extend (resp.get ('items', [])) req = service.objects (). list_next (req, resp) pprint (all_objects) def create_object (bucket, nomefile ): service = create_service () # Questo è il corpo della richiesta come specificato: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'name': filename, con open (nome file, 'rb') come f: req = service.objects (). insert (bucket = bucket, body = body, # Puoi anche solo impostare media_body = nomefile, ma per motivi di # dimostrazione, passare l'handle di file più generico, che potrebbe essere molto bene un StringIO o simile. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream') risp = req.execute () pprint (resp) def delete_object (bucket, nome file): service = create_service () res = service.objects (). delete (bucket = bucket, object = filename) .execute () pprint (res) def print_help (): print "" "Uso: python gcs_objects.py  Il comando può essere: help: stampa questo elenco di aiuto: elenca tutti gli oggetti nel bucket specificato create: carica il file fornito nel bucket specificato delete: cancella il nome file fornito dal bucket "" "if __name__ ==" __main__ ": if len ( sys.argv) < 2 or sys.argv[1] == "help" or \ sys.argv[1] not in ['list', 'create', 'delete', 'get']: print_help() sys.exit() if sys.argv[1] == 'list': if len(sys.argv) == 3: list_objects(sys.argv[2]) sys.exit() else: print_help() sys.exit() if sys.argv[1] == 'create': if len(sys.argv) == 4: create_object(sys.argv[2], sys.argv[3]) sys.exit() else: print_help() sys.exit() if sys.argv[1] == 'delete': if len(sys.argv) == 4: delete_object(sys.argv[2], sys.argv[3]) sys.exit() else: print_help() sys.exit() 

Lo script Python sopra mostra le principali operazioni che possono essere eseguite sugli oggetti. Questi includono:

  • creazione di un nuovo oggetto in un secchio
  • elenco di tutti gli oggetti in un secchio
  • cancellazione di un oggetto specifico

Vediamo come ognuna delle operazioni sopra riportate appare quando viene eseguito lo script.

$ python gcs_objects.py Uso: python gcs_objects.py  Il comando può essere: help: stampa questo elenco di aiuto: elenca tutti gli oggetti nel bucket specificato create: carica il file fornito nel bucket specificato delete: cancella il nome file fornito dal bucket $ python lista gcs_objects.py tutsplus-demo-test [u 'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size': u'0 ', u'contentType' : u'image / png ', risp = req.execute () u'name': u'tutsplus / Screen Shot 2016-10-17 a 1.03.16 PM.png ', u'size': u'36680 ' ] $ python gcs_objects.py crea tutsplus-demo-test gcs_buckets.py u'bucket ': u'tutsplus-demo-test', u'contentType ': u'application / octet-stream', u'crc32c ': u 'XIEyEw ==', u'etag ': u'CJCckonZ4c8CEAE =', u'generation ': u'1476702385770000', u'id ': u'tutsplus-demo-test / gcs_buckets.py / 1476702385770000', u'kind ': u'storage # object', u'md5Hash ': u' + bd6Ula + mG4bRXReSnvFew == ', u'mediaLink': u'https: //www.googleapis.com/download/storage/v1/b/tutsplus -demo-test / o / gcs_buckets.py? generation = 147670238577000 0 & alt = media ', u'metag enerazione ': u'1', u'name ': u'gcs_buckets.py', u'selfLink ': u'https: //www.googleapis.com/storage/v1/b/tutsplus-demo-test/o /gcs_buckets.py ', u'size': u'2226 ', u'storageClass': u'STANDARD ', u'timeCreated': u'2016-10-17T11: 06: 25.753Z ', u'aggiornato': u'2016-10-17T11: 06: 25.753Z ' $ python gcs_objects.py list tutsplus-demo-test [u'contentType': u'application / octet-stream ', u'name': u'gcs_buckets. py ', u'size': u'2226 ', u'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size ': u'0', u'contentType ': u'image / png', u'name ': u'tutsplus / Screen Shot 2016-10-17 a 1.03.16 PM.png', u 'size': u'36680 '] $ python gcs_objects.py cancella tutsplus-demo-test gcs_buckets.py "$ python lista gcs_objects.py tutsplus-demo-test [u'contentType': u'application / x-www -form-urlencoded; charset = UTF-8 ', u'name': u'tutsplus / ', u'size': u'0 ', u'contentType': u'image / png ', u'name ': u'tutsplus / Screen Shot 2016-10-17 a 1.03.16 PM.png', u'size ': u'36680']

Conclusione

In questa serie di tutorial abbiamo visto come funziona Google Cloud Storage da una prospettiva a volo d'uccello, seguita da un'analisi approfondita di bucket e oggetti. Abbiamo quindi visto come eseguire le principali operazioni relative a bucket e oggetti tramite Google Cloud Console. 

Quindi abbiamo eseguito lo stesso usando gli script Python. È possibile fare di più con Google Cloud Storage, ma è tutto da esplorare.