I den första delen av den här tvådelade handledningsserien hade vi en översikt över hur skopor används i Google Cloud Storage för att organisera filer. Vi såg hur man hanterar hinkar på Google Cloud Storage från Google Cloud Console. Detta följdes av ett Python-skript där dessa operationer utfördes programmatiskt.
I den här delen kommer jag att visa hur man hanterar objekt, dvs filer och mappar i GCS-skopor. Strukturen i denna handledning kommer att likna den för den föregående. Först kommer jag att visa hur man utför grundläggande åtgärder relaterade till filhantering med hjälp av Google Cloud Console. Detta följs av ett Python-skript för att göra samma operationer programmässigt.
Precis som hinknamn i GCS hade några riktlinjer och begränsningar, följer namngivning också en uppsättning riktlinjer. Objektnamn bör innehålla giltiga Unicode-tecken och ska inte innehålla karaktär för retur eller linjematning. Vissa rekommendationer inkluderar att inte ha tecken som "#", "[", "]", "*", "?" eller olagliga XML-kontrolltecken eftersom de kan tolkas felaktigt och kan leda till tvetydighet.
Objektnamnen i GCS följer också en platt namnrymd. Det betyder fysiskt finns det inga kataloger och underkataloger på GCS. Om du till exempel skapar en fil med namn /tutsplus/tutorials/gcs.pdf
, det kommer att se ut som om gcs.pdf
finns i en katalog som heter Handledningar
som i sin tur är en underkatalog av tutsplus
. Men enligt GCS ligger objektet helt enkelt i en hink med namnet /tutsplus/tutorials/gcs.pdf
.
Låt oss titta på hur man hanterar objekt med hjälp av Google Cloud Console och hoppa sedan på Python-skriptet för att göra samma sak programmässigt.
Jag fortsätter från var vi lämnade i den sista handledningen. Låt oss börja med att skapa en mapp.
För att skapa en ny mapp, klicka på Skapa mapp knappen markerad ovan. Skapa en mapp genom att fylla i önskat namn som visas nedan. Namnet ska följa konventionsnamn för objekt.
Låt oss nu ladda upp en fil i den nyskapade mappen.
Efter skapandet kommer GCS-webbläsaren att lista de nyskapade objekten. Objekt kan raderas genom att välja dem från listan och klicka på delete-knappen.
Om du klickar på uppdateringsknappen fyller du in användargränssnittet med eventuella ändringar i listan över objekt utan att uppdatera hela sidan.
I den första delen såg vi hur man skapade en Compute Engine-förekomst. Jag kommer att använda samma här och bygga på Python-skriptet från den sista delen.
Det finns inga ytterligare installationssteg som måste följas för denna handledning. Mer information om installations- eller utvecklingsmiljö finns i den första delen.
importera sys från pprint import pprint från googleapiclient import upptäckt från googleapiclient import http från oauth2client.client import GoogleCredentials def create_service (): credentials = GoogleCredentials.get_application_default () return discovery.build ("lagring", "v1", referenser = referenser) def list_objects (bucket): service = create_service () # Skapa en förfrågan till objects.list för att hämta en lista över objekt. fields_to_return = \ 'nextPageToken, objekt (namn, storlek, contentType, metadata (my-key)) req = service.objects (). list (hink = hink, fält = fields_to_return) all_objects = [] # Om du har för många objekt att lista i en förfrågan, list_next () kommer # hantera automatiskt personsökning med sidanToken. medan req: resp = req.execute () all_objects.extend (resp.get ('items', [])) req = service.objects (). list_next (req, resp) pprint (all_objects) def create_object (hink, filnamn ): service = create_service () # Detta är förfrågan som anges: # http://g.co/cloud/storage/docs/json_api/v1/objects/insert#request body = 'name': filnamn med öppna (filnamn, 'rb') som f: req = service.objects (). infoga (hink = hink, kropp = kropp, # Du kan också bara ställa in media_body = filnamn, men för # demonstrationens skull, skicka in det mer generiska filhanteraren, som # kan mycket väl vara en StringIO eller liknande. media_body = http.MediaIoBaseUpload (f, 'application / octet-stream')) resp = req.execute () pprint (resp) def delete_object (hink, filnamn): execute () pprint (res) def print_help (): print "" "Användning: python gcs_objects.pyKommandot kan vara: hjälp: Skriv ut den här hjälplistan: Listor alla objekt i den angivna hinken skapar: Ladda upp den angivna filen i den angivna hinkens radering: Ta bort det angivna filnamnet från hinken "" "om __name__ ==" __main__ ": om 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()
Ovanstående Python-skript visar de stora operationer som kan utföras på objekt. Dessa inkluderar:
Låt oss se hur var och en av ovanstående operationer ser ut när man kör skriptet.
$ python gcs_objects.py Användning: python gcs_objects.pyKommandot kan vara: hjälp: Skriver ut den här hjälplistan: Listor alla objekt i den angivna hinken skapar: Ladda upp den angivna filen i den angivna hinkens radering: Ta bort det angivna filnamnet från hinken $ python gcs_objects.py list tutsplus-demotest [u 'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', you'name': u'tutsplus /', u'ize ': u'0', u'contentType ' : u'image / png ', resp = req.execute () you'name': u'tutsplus / Screen Shot 2016-10-17 på 1.03.16 PM.png ', u'ize': u'36680 ' ] $ python gcs_objects.py skapa tutsplus-demotest gcs_buckets.py u'bucket ': u'tutsplus-demo-test', u'contentType ': u'application / octet-stream', u'crc32c ': u 'XIEyEw ==', du har tagit dig: u'CJCckonZ4c8CEAE = ', u'generation': u'1476702385770000 ', du har det: u'tutsplus-demo-test / gcs_buckets.py / 1476702385770000', u'kind ': u'magine # objekt', 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', you'name ': u'gcs_buckets.py', you'selfLink ': u'https: //www.googleapis.com/storage/v1/b/tutsplus-demo-test/o /gcs_buckets.py 'you'ize': u'2226 ', u'storageClass': u'STANDARD ', you'timeCreated': u'2016-10-17T11: 06: 25.753Z ', uppdaterad': u'2016-10-17T11: 06: 25.753Z ' $ python gcs_objects.py lista tutsplus-demo-test [u'contentType': u'application / octet-stream ', you'name': u'gcs_buckets. py ', u'ize': u'2226 ', u'contentType': u'application / x-www-form-urlencoded; charset = UTF-8 ', you'name': u'tutsplus / ', u'0 ', u'contentType': u'image / png ', you'name': u'tutsplus / Screen Shot 2016-10-17 på 1.03.16 PM.png ', du 'storlek': u'36680 '] $ python gcs_objects.py radera tutsplus-demo-testet gcs_buckets.py "$ python gcs_objects.py lista tutsplus-demotest [u'contentType': u'application / x-www -form-urlenkodad; charset = UTF-8 ', you'name': u'tutsplus / ', u'ize': u'0 ', u'contentType': u'image / png ', you'name ': u'tutsplus / Screen Shot 2016-10-17 at 1.03.16 PM.png', u'ize ': u'36680']
I den här tutorialserien såg vi hur Google Cloud Storage fungerar från en fågelperspektiv, som följdes av en djup analys av hinkar och föremål. Sedan såg vi hur du utför stora hinkar och objektrelaterade operationer via Google Cloud Console.
Sedan utförde vi samma sak med Python-skript. Det finns mer som kan göras med Google Cloud Storage, men det är kvar för att du ska utforska.