使用python上传文件到GCS桶的文件夹



我有一个gcs桶,那里有多个文件夹。我需要上传一个文件,是在我的本地到一个特定的文件夹在GCS桶。我使用下面的代码,它只在桶中直接上传,而不是在该桶的文件夹中。

from google.cloud import storage
def upload_to_bucket(destination_blob_name, path_to_file, bucket_name):
""" Upload data to a bucket"""

# Explicitly use service account credentials by specifying the private key
# file.
storage_client = storage.Client.from_service_account_json(
'service_account.json')

bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(path_to_file)

return blob.public_url
print(upload_to_bucket('hello_world.py', 'hello_world.py', 'gcs_bucket_name'))

文件夹结构:

gcs_bucket_name
folder_1
folder_2

谁能告诉我如何上传到GCS桶的文件夹?

在GCS中没有"文件夹"之类的东西,因为它是一个平面命名空间。你所看到的只是一种错觉,实际上"文件夹"是对象名称的一部分。

我建议阅读这个

的文档表示必须在destination_blob_name后面加上" path "

那么这个函数可能是这样的,默认路径是桶的根路径。

def upload_to_bucket(destination_path="", destination_blob_name, path_to_file, bucket_name):
""" Upload data to a bucket"""

# Explicitly use service account credentials by specifying the private key
# file.
storage_client = storage.Client.from_service_account_json(
'service_account.json')

bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_path+destination_blob_name)
blob.upload_from_filename(path_to_file)

return blob.public_url

当你调用它来上传文件到folder_2时,它可以是:

upload_to_bucket('folder_2/', 'hello_world.py', 'hello_world.py', 'gcs_bucket_name')

在GCS中没有真正的文件夹。你的"folder"只是作为文件名前缀的一个名称。所以blob = bucket.blob(destination_blob_name)应该是blob = bucket.blob(folder_name + destination_blob_name)

相关内容

  • 没有找到相关文章

最新更新