Cloud Function 将存储桶中的所有文件复制到同一个 GCS 存储桶内的文件夹中

Posted

技术标签:

【中文标题】Cloud Function 将存储桶中的所有文件复制到同一个 GCS 存储桶内的文件夹中【英文标题】:Cloud Function to copy all the files from a Storage bucket to a folder inside the same GCS storage bucket 【发布时间】:2021-06-13 14:22:37 【问题描述】:

我在 Google Cloud Storage 存储桶中有文件,我想从收到的存储桶中复制所有文件,并在同一存储桶的文件夹中创建所有这些文件的副本。 (我找到了复制到存储桶的解决方案,但是如何复制到存储桶内的文件夹?)

destination = storage_client.bucket('source-bucket-name') #这里我的源桶和目标桶是一样的

有没有办法将文件夹名称与存储桶名称一起传递?

【问题讨论】:

【参考方案1】:

实际上谷歌云存储并没有真正的“文件夹”。在 Cloud Storage 控制台中,您的存储桶中的文件以文件夹的层次结构树的形式呈现(就像本地硬盘上的文件系统一样),但这只是呈现文件的一种方式:没有真正的文件夹/目录在一个桶里。 Cloud Storage 控制台只是使用文件路径的不同部分来“模拟”文件夹结构,使用“/”分隔符。

Cloud Storage 和 gsutil 上的 doc 很好地解释并说明了这种“分层文件树的幻觉”。

因此,换句话说,您可以使用由“文件夹/目录”名称、“/”分隔符和最后是文件名。例如:fileName = "summer1970/pic1234.jpg"。正如下面的 cmets 所阐明的,分层文件树的错觉是通过文件命名而不是通过存储桶命名创建的。

【讨论】:

ok,是不是说我可以直接把folderName和bucket name一起传过去?例如:destination = storage_client.bucket('source-bucket-name/folderName') - @Renaud Tarnec 不,一点也不。只有一个桶是storage_client.bucket('source-bucket-name'),因为你写了“我的源桶和目标桶是一样的”。在此存储桶中,您可以创建 文件,并且在定义文件名时可以使用“/”分隔符来模拟文件夹结构。因此,分层文件树的错觉是通过文件命名而不是通过存储桶命名创建的。如果你分享你的整个代码,我可以指出你在哪里适应。

以上是关于Cloud Function 将存储桶中的所有文件复制到同一个 GCS 存储桶内的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

根据文件名将 Google Cloud 存储桶中的多个文件复制到不同的目录

Google Cloud Load Balancer - 子域重定向到存储桶中的特定文件夹

Cloud Function 运行缓慢并超出可用内存

如何在谷歌存储桶中列出所有上传到存储桶的文件?

从 Google Cloud Storage Bucket 下载文件夹

默认情况下,如何将 AWS S3 存储桶中的所有对象设为公开?