首页 > 解决方案 > 在项目之间转移 Firebase 存储桶

问题描述

我正在尝试将一个 Firebase 项目的存储桶中的文件夹内容复制到另一个 Firebase 项目的存储桶中。

我一直在关注 Firestore文档和这个SO question

这两个项目都拥有对其他服务帐户的必要权限。

这是我所做的:

当尝试使用云 shell 终端将文件从 Project-A 的默认存储桶中的文件夹传输到 Project-B 的默认存储桶时,我首先将项目设置为“Project-A”。然后我跑了gcloud beta firestore export gs://[PROJECT_A_ID] --collection-ids=[FOLDER_TO_TRANSFER] --async。这成功并在 Project-A 中创建了一个名为“2019-08-26T21:23:23_26014/”的文件夹。此文件夹包含一些元数据。接下来,我尝试通过将项目设置为 Project-B 并运行来开始导入。gcloud beta firestore import gs://[PROJECT_A_ID]/2019-08-26T21:23:23_26014 这完成并且日志显示以下消息:

done: true metadata: '@type': type.googleapis.com/google.firestore.admin.v1beta1.ImportDocumentsMetadata collectionIds: - [FOLDER_TO_TRANSFER] endTime: '2019-08-26T21:25:56.794588Z' inputUriPrefix: gs://[PROJECT_A_ID]/2019-08-26T21:23:23_26014 operationState: SUCCESSFUL startTime: '2019-08-26T21:25:19.689430Z' name: projects/[PROJECT_B]/databases/(default)/operations/[SOME_ID_STRING] response: '@type': type.googleapis.com/google.protobuf.Empty

但是,Project-B 存储桶没有任何新文件或文件夹。看起来导入什么也没做。我错过了什么吗?

标签: firebasegoogle-cloud-storage

解决方案


您可以在 GCP Console 中创建传输作业。只要您具有访问权限,您就可以指定来自不同项目的源/目标存储桶。您可以通过设置“指定文件过滤器”来指定文件夹:

https://console.cloud.google.com/storage/transfer

您还可以使用该gsutil工具(它是 的一部分)gcloud将您的对象移动或复制到另一个存储桶。

因此,您的默认存储桶将是gs://[PROJECT_A_ID].appspot.comgs://[PROJECT_B_ID].appspot.com假设您要复制以下内容my_directory

gsutil cp -r gs://[PROJECT_A_ID].appspot.com/my_directory gs://[PROJECT_B_ID].appspot.com

推荐阅读