Im ersten Teil dieser zweiteiligen Tutorial-Reihe haben wir einen Überblick darüber erhalten, wie Buckets in Google Cloud Storage zum Organisieren von Dateien verwendet werden. Wir haben gesehen, wie Buckets in Google Cloud Storage von Google Cloud Console aus verwaltet werden. Es folgte ein Python-Skript, in dem diese Operationen programmgesteuert ausgeführt wurden.
In diesem Teil werde ich zeigen, wie Objekte verwaltet werden, d. H. Dateien und Ordner in GCS-Buckets. Die Struktur dieses Tutorials ist der des vorherigen ähnlich. Zuerst werde ich zeigen, wie Sie grundlegende Vorgänge im Zusammenhang mit der Dateiverwaltung mithilfe von Google Cloud Console durchführen. Danach folgt ein Python-Skript, um dieselben Operationen programmgesteuert auszuführen.
So wie die Bucketbenennung in GCS einige Richtlinien und Einschränkungen enthielt, folgt die Objektbenennung einer Reihe von Richtlinien. Objektnamen sollten gültige Unicode-Zeichen enthalten und keine Wagenrücklauf- oder Zeilenvorschubzeichen enthalten. Einige Empfehlungen beinhalten, Zeichen wie "#", "[", "]", "*", "?" oder unzulässige XML-Steuerzeichen, da sie falsch interpretiert werden können und zu Mehrdeutigkeiten führen können.
Objektnamen in GCS folgen ebenfalls einem flachen Namespace. Dies bedeutet, dass physisch keine Verzeichnisse und Unterverzeichnisse in GCS vorhanden sind. Zum Beispiel, wenn Sie eine Datei mit Namen erstellen /tutsplus/tutorials/gcs.pdf
, es wird so aussehen gcs.pdf
befindet sich in einem Verzeichnis namens Tutorials
was wiederum ein Unterverzeichnis von tutsplus
. Laut GCS befindet sich das Objekt jedoch einfach in einem Bucket mit dem Namen /tutsplus/tutorials/gcs.pdf
.
Sehen wir uns an, wie Sie Objekte mit Google Cloud Console verwalten und dann mit dem Python-Skript springen, um dasselbe programmgesteuert durchzuführen.
Ich werde im letzten Tutorial von dort fortfahren, wo wir abgereist sind. Beginnen wir mit dem Erstellen eines Ordners.
Um einen neuen Ordner anzulegen, klicken Sie auf Ordner erstellen Schaltfläche oben hervorgehoben. Erstellen Sie einen Ordner, indem Sie wie unten gezeigt den gewünschten Namen eingeben. Der Name sollte den Objektbenennungskonventionen folgen.
Lassen Sie uns nun eine Datei in den neu erstellten Ordner hochladen.
Nach der Erstellung listet der GCS-Browser die neu erstellten Objekte auf. Objekte können gelöscht werden, indem Sie sie aus der Liste auswählen und auf die Schaltfläche "Löschen" klicken.
Durch Klicken auf die Aktualisierungsschaltfläche werden alle Änderungen an der Liste der Objekte auf der Benutzeroberfläche angezeigt, ohne die gesamte Seite zu aktualisieren.
Im ersten Teil haben wir gesehen, wie Sie eine Compute Engine-Instanz erstellen. Ich werde dasselbe hier verwenden und auf dem Python-Skript vom letzten Teil aus aufbauen.
Für dieses Lernprogramm sind keine zusätzlichen Installationsschritte erforderlich. Weitere Informationen zur Installations- oder Entwicklungsumgebung finden Sie im ersten Teil.
import sys aus pprint import pprint aus googleapiclient import Discovery aus googleapiclient import http aus oauth2client.client import GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ('storage', 'v1') def list_objects (bucket): service = create_service () # Erstellen Sie eine Anfrage an objects.list, um eine Liste von Objekten abzurufen. fields_to_return = \ 'nextPageToken, Elemente (Name, Größe, contentType, Metadaten (my-key))' req = service.objects (). list (bucket = bucket, Felder = fields_to_return) all_objects = [] # Wenn Sie zu viele haben Elemente, die in einer Anfrage aufgelistet werden sollen, # listet #next () automatisch das Paging mit dem 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, Dateiname) ): service = create_service () # Dies ist der Anfragetext wie angegeben: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'name': Dateiname, mit open (Dateiname, 'rb') als f: req = service.objects (). insert (Bucket = Bucket, Body = Body, # Sie können auch nur media_body = Dateiname setzen, aber der # Demonstration wegen übergeben Das generischere Dateihandle, # kann sehr wohl ein StringIO oder ähnliches sein. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream')) bzw. = req.execute () pprint (bzw.) def delete_object (bucket, Dateiname): service = create_service () res = service.objects (). delete (Bucket = Bucket, Objekt = Dateiname) .execute () pprint (res) def print_help (): print "" "Verwendung: python gcs_objects.pyBefehl kann sein: help: Druckt diese Hilfeliste: Listet alle Objekte im angegebenen Bucket auf: create: Die angegebene Datei in den angegebenen Bucket laden delete: Löscht den angegebenen Dateinamen aus 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()
Das obige Python-Skript veranschaulicht die wichtigsten Operationen, die für Objekte ausgeführt werden können. Diese schließen ein:
Sehen wir uns an, wie die oben genannten Vorgänge aussehen, wenn das Skript ausgeführt wird.
$ python gcs_objects.py Verwendung: python gcs_objects.pyBefehl kann sein: help: Druckt diese Hilfeliste: Listet alle Objekte im angegebenen Bucket auf: create: Die angegebene Datei in den angegebenen Bucket laden delete: Löscht den angegebenen Dateinamen aus dem Bucket $ python gcs_objects.py list 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 ', resp = req.execute () u'name': u'tutsplus / Screen Shot 2016-10-17 um 1.03.16 PM.png ', u'size': u'36680 ' ] $ python gcs_objects.py tutsplus-demo-test erstellen 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 eneration ': 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'updated': 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 um 1.03.16 PM.png', u 'size': u'36680 '] $ python gcs_objects.py tutsplus-demo-test löschen gcs_buckets.py "$ python gcs_objects.py list 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 um 1.03.16 PM.png', u'size ': u'36680']
In dieser Tutorial-Serie haben wir gesehen, wie Google Cloud Storage aus der Vogelperspektive funktioniert. Anschließend wurden eingehende Analysen von Buckets und Objekten durchgeführt. Dann haben wir gesehen, wie Sie wichtige Eimer- und Objektvorgänge über Google Cloud Console durchführen.
Dann haben wir dasselbe mit Python-Skripten durchgeführt. Google Cloud Storage bietet noch mehr Möglichkeiten, die Sie jedoch noch erkunden können.