获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

开始在 Android 上使用 Cloud Storage

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

Cloud Storage for Firebase 可让您上传和共享用户生成的内容,例如图片和视频,从而让您可以将富媒体内容构建到您的应用中。您的数据存储在Google Cloud Storage 存储桶中——一种具有高可用性和全局冗余的 EB 级对象存储解决方案。 Cloud Storage for Firebase 让您可以直接从移动设备和网络浏览器安全地上传这些文件,轻松处理不稳定的网络。

先决条件

如果您还没有,请将 Firebase 添加到您的 Android 项目中。

创建默认 Cloud Storage 存储分区

  1. Firebase 控制台的导航窗格中,选择Storage ,然后单击Get started

  2. 查看有关使用安全规则保护 Cloud Storage 数据的消息。在开发过程中,考虑设置公共访问规则

  3. 为您的默认 Cloud Storage 存储分区选择一个位置

    • 此位置设置是您项目的默认 Google Cloud Platform (GCP) 资源位置。请注意,此位置将用于您的项目中需要位置设置的 GCP 服务,特别是您的Cloud Firestore数据库和您的App Engine应用(如果您使用 Cloud Scheduler,这是必需的)。

    • 如果您无法选择位置,则您的项目已经有一个默认的 GCP 资源位置。它是在项目创建期间或在设置需要位置设置的其他服务时设置的。

    如果您使用 Blaze 计划,则可以创建多个存储桶,每个存储桶都有自己的位置

  4. 单击完成

设置公共访问

Cloud Storage for Firebase 提供了一种声明性规则语言,可让您定义数据的结构方式、索引方式以及何时可以读取和写入数据。默认情况下,对 Cloud Storage 的读写访问受到限制,因此只有经过身份验证的用户才能读取或写入数据。要在不设置身份验证的情况下开始使用,您可以配置公共访问规则

这确实使 Cloud Storage 对任何人开放,甚至是不使用您的应用程序的人,因此请确保在设置身份验证时再次限制您的 Cloud Storage。

将 Cloud Storage SDK 添加到您的应用

在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle )中,添加 Cloud Storage Android 库的依赖项。我们建议使用Firebase Android BoM来控制库版本控制。

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage'
}

通过使用Firebase Android BoM ,您的应用将始终使用兼容版本的 Firebase Android 库。

(替代)使用 BoM 的情况下添加 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个Firebase 库,我们强烈建议您使用 BoM 来管理库版本,以确保所有版本都兼容。

dependencies {
    // Add the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage:20.1.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx'
}

通过使用Firebase Android BoM ,您的应用将始终使用兼容版本的 Firebase Android 库。

(替代)使用 BoM 的情况下添加 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个Firebase 库,我们强烈建议您使用 BoM 来管理库版本,以确保所有版本都兼容。

dependencies {
    // Add the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx:20.1.0'
}

设置云存储

访问您的 Cloud Storage 存储分区的第一步是创建一个FirebaseStorage实例:

Java

FirebaseStorage storage = FirebaseStorage.getInstance();

Kotlin+KTX

storage = Firebase.storage

您已准备好开始使用 Cloud Storage!

首先,让我们学习如何创建 Cloud Storage 引用

高级设置

有一些用例需要额外设置:

  • 多个地理区域使用 Cloud Storage 存储分区
  • 不同的存储类中使用 Cloud Storage 存储分区
  • 将 Cloud Storage 存储分区与同一应用中的多个经过身份验证的用户一起使用

如果您的用户遍布世界各地,并希望将他们的数据存储在他们附近,那么第一个用例是完美的。例如,您可以在美国、欧洲和亚洲创建存储桶来为这些地区的用户存储数据以减少延迟。

如果您拥有具有不同访问模式的数据,则第二个用例会很有帮助。例如:您可以设置一个多区域或区域存储桶,用于存储图片或其他经常访问的内容,以及一个近线或冷线存储桶,用于存储用户备份或其他不经常访问的内容。

在上述任一用例中,您都需要使用多个 Cloud Storage 存储分区

如果您正在构建一个应用程序,例如 Google Drive,第三个用例非常有用,它允许用户拥有多个登录帐户(例如,一个个人帐户和一个工作帐户)。您可以使用自定义 Firebase 应用实例来验证每个附加帐户。

使用多个 Cloud Storage 存储分区

如果您想使用上面提供的默认存储分区以外的 Cloud Storage 存储分区,或者在单个应用中使用多个 Cloud Storage 存储分区,您可以创建一个引用您的自定义存储分区的FirebaseStorage实例:

Java

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

Kotlin+KTX

// Get a non-default Storage bucket
val storage = Firebase.storage("gs://my-custom-bucket")

使用导入的存储桶

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

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实例:

Java

// Get the default bucket from a custom FirebaseApp
FirebaseStorage storage = FirebaseStorage.getInstance(customApp);

// Get a non-default bucket from a custom FirebaseApp
FirebaseStorage customStorage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");

Kotlin+KTX

// Get the default bucket from a custom FirebaseApp
val storage = Firebase.storage(customApp!!)

// Get a non-default bucket from a custom FirebaseApp
val customStorage = Firebase.storage(customApp, "gs://my-custom-bucket")

下一步

,

Cloud Storage for Firebase 可让您上传和共享用户生成的内容,例如图片和视频,从而让您可以将富媒体内容构建到您的应用中。您的数据存储在Google Cloud Storage 存储桶中——一种具有高可用性和全局冗余的 EB 级对象存储解决方案。 Cloud Storage for Firebase 让您可以直接从移动设备和网络浏览器安全地上传这些文件,轻松处理不稳定的网络。

先决条件

如果您还没有,请将 Firebase 添加到您的 Android 项目中。

创建默认 Cloud Storage 存储分区

  1. Firebase 控制台的导航窗格中,选择Storage ,然后单击Get started

  2. 查看有关使用安全规则保护 Cloud Storage 数据的消息。在开发过程中,考虑设置公共访问规则

  3. 为您的默认 Cloud Storage 存储分区选择一个位置

    • 此位置设置是您项目的默认 Google Cloud Platform (GCP) 资源位置。请注意,此位置将用于您的项目中需要位置设置的 GCP 服务,特别是您的Cloud Firestore数据库和您的App Engine应用(如果您使用 Cloud Scheduler,这是必需的)。

    • 如果您无法选择位置,则您的项目已经有一个默认的 GCP 资源位置。它是在项目创建期间或在设置需要位置设置的其他服务时设置的。

    如果您使用 Blaze 计划,则可以创建多个存储桶,每个存储桶都有自己的位置

  4. 单击完成

设置公共访问

Cloud Storage for Firebase 提供了一种声明性规则语言,可让您定义数据的结构方式、索引方式以及何时可以读取和写入数据。默认情况下,对 Cloud Storage 的读写访问受到限制,因此只有经过身份验证的用户才能读取或写入数据。要在不设置身份验证的情况下开始使用,您可以配置公共访问规则

这确实使 Cloud Storage 对任何人开放,甚至是不使用您的应用程序的人,因此请确保在设置身份验证时再次限制您的 Cloud Storage。

将 Cloud Storage SDK 添加到您的应用

在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle )中,添加 Cloud Storage Android 库的依赖项。我们建议使用Firebase Android BoM来控制库版本控制。

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage'
}

通过使用Firebase Android BoM ,您的应用将始终使用兼容版本的 Firebase Android 库。

(替代)使用 BoM 的情况下添加 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个Firebase 库,我们强烈建议您使用 BoM 来管理库版本,以确保所有版本都兼容。

dependencies {
    // Add the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage:20.1.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx'
}

通过使用Firebase Android BoM ,您的应用将始终使用兼容版本的 Firebase Android 库。

(替代)使用 BoM 的情况下添加 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个Firebase 库,我们强烈建议您使用 BoM 来管理库版本,以确保所有版本都兼容。

dependencies {
    // Add the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx:20.1.0'
}

设置云存储

访问您的 Cloud Storage 存储分区的第一步是创建一个FirebaseStorage实例:

Java

FirebaseStorage storage = FirebaseStorage.getInstance();

Kotlin+KTX

storage = Firebase.storage

您已准备好开始使用 Cloud Storage!

首先,让我们学习如何创建 Cloud Storage 引用

高级设置

有一些用例需要额外设置:

  • 多个地理区域使用 Cloud Storage 存储分区
  • 不同的存储类中使用 Cloud Storage 存储分区
  • 将 Cloud Storage 存储分区与同一应用中的多个经过身份验证的用户一起使用

如果您的用户遍布世界各地,并希望将他们的数据存储在他们附近,那么第一个用例是完美的。例如,您可以在美国、欧洲和亚洲创建存储桶来为这些地区的用户存储数据以减少延迟。

如果您拥有具有不同访问模式的数据,则第二个用例会很有帮助。例如:您可以设置一个多区域或区域存储桶,用于存储图片或其他经常访问的内容,以及一个近线或冷线存储桶,用于存储用户备份或其他不经常访问的内容。

在上述任一用例中,您都需要使用多个 Cloud Storage 存储分区

如果您正在构建一个应用程序,例如 Google Drive,第三个用例非常有用,它允许用户拥有多个登录帐户(例如,一个个人帐户和一个工作帐户)。您可以使用自定义 Firebase 应用实例来验证每个附加帐户。

使用多个 Cloud Storage 存储分区

如果您想使用上面提供的默认存储分区以外的 Cloud Storage 存储分区,或者在单个应用中使用多个 Cloud Storage 存储分区,您可以创建一个引用您的自定义存储分区的FirebaseStorage实例:

Java

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

Kotlin+KTX

// Get a non-default Storage bucket
val storage = Firebase.storage("gs://my-custom-bucket")

使用导入的存储桶

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

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实例:

Java

// Get the default bucket from a custom FirebaseApp
FirebaseStorage storage = FirebaseStorage.getInstance(customApp);

// Get a non-default bucket from a custom FirebaseApp
FirebaseStorage customStorage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");

Kotlin+KTX

// Get the default bucket from a custom FirebaseApp
val storage = Firebase.storage(customApp!!)

// Get a non-default bucket from a custom FirebaseApp
val customStorage = Firebase.storage(customApp, "gs://my-custom-bucket")

下一步