Membaca dan menulis ke Cloud Storage

Dokumen ini menjelaskan cara menyimpan dan mengambil data menggunakan library klien Cloud Storage. Anda dianggap telah menyelesaikan tugas yang dijelaskan dalam artikel Menyiapkan Cloud Storage untuk mengaktifkan bucket Cloud Storage dan mendownload library klien. Anda juga dianggap telah memahami cara membuat aplikasi App Engine.

Untuk contoh kode tambahan, lihat Library klien Cloud Storage

Impor yang diperlukan

Gunakan cuplikan kode di bawah untuk mengakses Cloud Storage menggunakan library klien:

# Imports the Google Cloud client library
from google.cloud import storage

# Instantiates a client
storage_client = storage.Client()

# The name for the new bucket
bucket_name = "my-new-bucket"

# Creates the new bucket
bucket = storage_client.create_bucket(bucket_name)

print(f"Bucket {bucket.name} created.")

Menentukan bucket Cloud Storage

Sebelum melakukan operasi apa pun di Cloud Storage, Anda perlu memberi nama untuk bucket.

# Imports the Google Cloud client library
from google.cloud import storage

# Instantiates a client
storage_client = storage.Client()

# The name for the new bucket
bucket_name = "my-new-bucket"

# Creates the new bucket
bucket = storage_client.create_bucket(bucket_name)

print(f"Bucket {bucket.name} created.")

Cara termudah untuk menentukan nama bucket adalah menggunakan bucket default untuk project Anda. Panggilan ke get_default_gcs_bucket_name akan berhasil hanya jika Anda telah membuat bucket default untuk project Anda.

Menulis ke Cloud Storage

Contoh berikut menunjukkan cara menulis ke bucket:

from google.cloud import storage


def write_read(bucket_name, blob_name):
    """Write and read a blob from GCS using file-like IO"""
    # The ID of your GCS bucket
    # bucket_name = "your-bucket-name"

    # The ID of your new GCS object
    # blob_name = "storage-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # Mode can be specified as wb/rb for bytes mode.
    # See: https://docs.python.org/3/library/io.html
    with blob.open("w") as f:
        f.write("Hello world")

    with blob.open("r") as f:
        print(f.read())

Perhatikan hal berikut:

  • Dalam panggilan guna membuka file untuk menulis, contoh tersebut menentukan header Cloud Storage tertentu yang menulis metadata kustom untuk file tersebut; metadata ini dapat diambil menggunakan cloudstorage.stat(). Anda dapat menemukan daftar header yang didukung dalam referensi cloudstorage.open().

  • Header x-goog-acl tidak ditetapkan. Artinya, ACL Cloud Storage default baca publik akan diterapkan ke objek saat ditulis ke bucket.

  • Pastikan Anda memanggil fungsi untuk menutup file setelah selesai menulis. Jika Anda tidak melakukan hal ini, file tidak akan ditulis ke Cloud Storage. Perlu diketahui bahwa setelah memanggil fungsi file Python close(), Anda tidak dapat melakukan penambahan ke file. Jika perlu mengubah file, Anda harus memanggil fungsi file Python open() untuk membuka file lagi dalam mode tulis, yang melakukan penimpaan, bukan penambahan.

Membaca dari Cloud Storage

Contoh berikut menunjukkan cara membaca file lengkap dari bucket:

from google.cloud import storage


def write_read(bucket_name, blob_name):
    """Write and read a blob from GCS using file-like IO"""
    # The ID of your GCS bucket
    # bucket_name = "your-bucket-name"

    # The ID of your new GCS object
    # blob_name = "storage-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # Mode can be specified as wb/rb for bytes mode.
    # See: https://docs.python.org/3/library/io.html
    with blob.open("w") as f:
        f.write("Hello world")

    with blob.open("r") as f:
        print(f.read())

Dalam kedua contoh tersebut, argumen blob_name yang Anda teruskan ke cloudstorage.open() adalah jalur ke file dalam format YOUR_BUCKET_NAME/PATH_IN_GCS. Perlu diketahui bahwa default untuk cloudstorage.open() adalah mode hanya baca. Anda tidak perlu menentukan mode saat membuka file untuk membacanya.

Mencantumkan konten bucket

Kode contoh ini menunjukkan cara menelusuri bucket dengan konten jenis blob :

from google.cloud import storage


def list_blobs(bucket_name):
    """Lists all the blobs in the bucket."""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()

    # Note: Client.list_blobs requires at least package version 1.17.0.
    blobs = storage_client.list_blobs(bucket_name)

    # Note: The call returns a response only when the iterator is consumed.
    for blob in blobs:
        print(blob.name)

Perhatikan bahwa nama file lengkap ditampilkan sebagai satu string tanpa pembatas direktori. Jika ingin menampilkan file dengan hierarki direktori yang lebih mudah dikenali, atur parameter delimiter ke pembatas direktori yang ingin Anda gunakan.

Menghapus file di Cloud Storage

Kode di bawah ini menunjukkan cara menghapus file dari Cloud Storage menggunakan metode cloudstorage.delete() (diimpor sebagai gcs).

from google.cloud import storage


def delete_blob(bucket_name, blob_name):
    """Deletes a blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"

    storage_client = storage.Client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)
    generation_match_precondition = None

    # Optional: set a generation-match precondition to avoid potential race conditions
    # and data corruptions. The request to delete is aborted if the object's
    # generation number does not match your precondition.
    blob.reload()  # Fetch blob metadata to use in generation_match_precondition.
    generation_match_precondition = blob.generation

    blob.delete(if_generation_match=generation_match_precondition)

    print(f"Blob {blob_name} deleted.")

Contoh ini membersihkan file yang ditulis ke bucket di bagian Menulis ke Cloud Storage.

Langkah berikutnya