0

我是 GCP 和 GCP 存储的新手。我想将文件从 PC 上的文件系统上传到 GCS 存储桶。我找到了以下代码并对其进行了更改。

但我有文件位于这样的文件夹中:\F1\Data\Export\PlayOnUsers\2021\12\ 那是 2021 年零 12 个月 - 十二月

所以\F1\Data\Export\PlayOnUsers\变了之后。

我需要输入与 GCS 类似的格式。我需要创建子存储桶2021\12\

这是怎么做到的?我也没有看到您放置 GCS 凭证的部分

到目前为止我有这个代码:

    from google.cloud import storage
    
    
    def upload_blob(bucket_name, source_file_name, destination_blob_name):
        """Uploads a file to the bucket."""
        # The ID of your GCS bucket
        bucket_name = "MyBucket-scv"
    
        # The path to your file to upload
        source_file_name = "F1/Data/Export"
    
        # The ID of your GCS object
        destination_blob_name = "storage-object-name"
    
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(destination_blob_name)
    
        blob.upload_from_filename(source_file_name)
    
        print(
            "File {} uploaded to {}.".format(
                source_file_name, destination_blob_name
            )
        )
    
    upload_blob(.., .., ..)

# how do I pass parameters automated when calling the function?
4

1 回答 1

0

请参阅自动查找凭证。使用这些“应用程序默认凭据”是一种很好的做法。您需要做的就是拥有一个具有适当角色|权限的服务帐户,如果您在 GCP 之外运行(即不在 Compute Engine 等上),那么您需要创建一个服务帐户密钥并在您GOOGLE_APPLICATION_CREDENTIALS 之前引用它运行你的代码。

Google Cloud Storage (GCS) 并没有真正的文件夹概念,也没有“子存储桶”的概念。事实上,GCS 存储桶中的所有内容都称为对象,但对象名称可能包括/(这是 *nix 等效于 Windows' /)和通常用于表示文件夹路径的 (!)。

因此,您只需要担心递归迭代您的 Windows 文件夹(我将把它留给您),然后对于您的代码找到的每个文件,它需要在您的 GCS 存储桶中创建一个对象,其中包括:

  1. 文件夹结构用/而不是\
  2. 文件名

IE

  • \F1|Data\Export\PlayOnUsers\2021\12\x变成gs://your-bucket/F1/Data/Exporter/PlayOnUsers/2021/12/x
  • \F1|Data\Export\PlayOnUsers\2022\01\x变成gs://your-bucket/F1/Data/Exporter/PlayOnUsers/2022/01/x
于 2021-12-23T17:10:05.717 回答