Cloud Storage 使用入门 (Flutter)

使用 Cloud Storage for Firebase,您可以上传和共享用户生成的内容(如图片和视频),以便将富媒体内容融入您的应用。您的数据存储在 Google Cloud Storage 存储桶中,这是一个 EB 级对象存储解决方案,具备高可用性和全局冗余性。通过 Cloud Storage for Firebase,您可以直接从移动设备和网络浏览器安全上传这些文件,从容应对网络不够稳定的情况。

准备工作

  1. 请确保您已完成 Flutter 应用入门指南(如果尚未完成)。其中包括:

    • 创建 Firebase 项目。

    • 安装并初始化 Firebase SDKs for Flutter。

  2. 确保您的 Firebase 项目采用的是随用随付 Blaze 定价方案。如果您是 Firebase 和 Google Cloud 新手,请确认您是否有资格获得 $300 赠金

创建默认 Cloud Storage 存储桶

  1. Firebase 控制台的导航窗格中,选择 Storage

    如果您的项目尚未采用随用随付 Blaze 定价方案,系统会提示您升级项目。

  2. 点击开始使用

  3. 选择一个位置作为您的默认存储桶。

  4. 为默认存储桶配置 Firebase Security Rules。在开发过程中,请考虑设置公开访问规则

  5. 点击完成

您现在可以在 Firebase 控制台的Cloud Storage 文件”标签页中查看存储桶。默认存储桶名称的格式为 PROJECT_ID.firebasestorage.app

设置公开访问权限

Cloud Storage for Firebase 提供了一种声明式规则语言,可用于定义数据的结构、将数据编入索引的方式,以及何时可以读取和写入数据。默认情况下,对 Cloud Storage 的读写权限是受限的,只有通过身份验证的用户才能读写数据。如需在未设置 Firebase Authentication 的情况下开始使用,您可以配置公共访问权限规则

这会使得 Cloud Storage 向所有人开放,包括不使用您的应用的用户,因此在设置身份验证后,请务必重新限制对 Cloud Storage 的访问权限。

将 Cloud Storage SDK 添加到您的应用

  1. 从 Flutter 项目的根目录运行以下命令,以安装该插件:

    flutter pub add firebase_storage
    
  2. 完成后,重新构建您的 Flutter 应用:

    flutter run
    
  3. 在 Dart 代码中导入该插件:

    import 'package:firebase_storage/firebase_storage.dart';
    

设置 Cloud Storage

  1. 从您的 Flutter 项目目录中运行 flutterfire configure。这会更新应用代码库中的 Firebase 配置文件 (firebase_options.dart),使其具有默认 Cloud Storage 存储桶的名称。

  2. 通过创建 FirebaseStorage 实例来访问您的 Cloud Storage 存储桶:

    final storage = FirebaseStorage.instance;
    
    // Alternatively, explicitly specify the bucket name URL.
    // final storage = FirebaseStorage.instanceFor(bucket: "gs://<var>BUCKET_NAME</var>");
    

现在可以开始使用 Cloud Storage 了!

后续步骤:了解如何创建 Cloud Storage 引用

高级设置

以下几种使用情形需要进行额外的设置:

  • 使用多个地理区域中的 Cloud Storage 存储桶
  • 使用不同存储类别的 Cloud Storage 存储桶
  • 在同一个应用中有多个经过身份验证的用户的情况下使用 Cloud Storage 存储桶

如果您的用户遍布世界各地,并且您希望将他们的数据存储在各自所在地附近,则非常符合第一种使用情形。例如,您可以在美国、欧洲和亚洲分别创建存储桶,为这些区域的用户存储数据,以减少延迟时间。

如果您的数据有多种不同的访问模式,则符合第二种使用情形。 例如,您可以设置一个多区域或单区域存储桶来存储照片或其他经常访问的内容,并设置一个 Nearline 或 Coldline 存储桶来存储用户备份或其他不常访问的内容。

在这两种使用情形下,您都需要使用多个 Cloud Storage 存储桶

如果您要构建一个类似 Google 云端硬盘这样允许用户登录多个账号(例如一个个人账号和一个工作账号)的应用,则符合第三种使用情形。您可以使用自定义 Firebase 应用实例来对每个额外的账号进行身份验证。

使用多个 Cloud Storage 存储桶

如果需要使用上文所述的默认存储桶以外的 Cloud Storage 存储桶,或在单个应用中使用多个 Cloud Storage 存储桶,则可以创建一个引用您的自定义存储桶的 FirebaseStorage 实例:

// Get a non-default Storage bucket
final storage = FirebaseStorage.instanceFor(bucket: "gs://my-custom-bucket");

使用导入的存储桶

将现有 Cloud Storage 存储桶导入 Firebase 时,您必须使用 Google Cloud SDK 中包含的 gsutil 工具向 Firebase 授予访问这些文件的权限:

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://YOUR-CLOUD-STORAGE-BUCKET

您可以按 Firebase 项目简介中介绍的方法找到项目编号。

这不会影响新建的存储桶,因为其默认已设置为允许 Firebase 访问。这是一个临时的解决方法,将来不需要再手动执行。

使用自定义 Firebase 应用

如果您要使用自定义 FirebaseApp 构建更复杂的应用,可以创建使用该应用初始化的 FirebaseStorage 实例:

// Use a non-default App
final storage = FirebaseStorage.instanceFor(app: customApp);

后续步骤