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

与谷歌云集成

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

Cloud Storage for Firebase 与Google Cloud紧密集成。适用于 Cloud Storage 的 Firebase SDK 将文件直接存储在Google Cloud Storage 存储桶中,随着应用的增长,您可以轻松集成其他 Google Cloud 服务,例如 App Engine 或 Cloud Functions 等托管计算,或 Cloud Vision 或 Google 等机器学习 API翻译。

Firebase 使用 Google Cloud 服务帐户来操作和管理服务,而无需共享用户凭据。当您创建使用 Cloud Storage 的 Firebase 项目时,您可能会注意到相应的服务帐户已在您的项目中可用: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com 。有关详细信息,请参阅此Firebase 支持指南

实际上,适用于云存储的 Firebase SDK 使用App Engine免费层中的默认存储桶。这使您可以快速启动并运行 Cloud Storage,而无需提供信用卡或启用 Cloud Billing 帐户。它还可以让您轻松地在 Firebase 和 Google Cloud 项目之间共享数据。

与 Google Cloud 集成(包括导入现有的 Cloud Storage 存储桶)需要 Blaze 计划中的 Firebase 项目。在我们的定价页面上了解有关计划的更多信息。

谷歌云存储

您可以使用Google Cloud Storage API访问通过适用于 Cloud Storage 的 Firebase SDK 上传的文件,尤其是执行更复杂的操作,例如复制或移动文件,或列出引用处的所有可用文件。

请务必注意,这些请求使用 Google Cloud Storage访问控制选项,而不是 Firebase 身份验证和 Cloud Storage 安全规则。

蜜蜂

除了适用于 Cloud Storage 的 Firebase SDK 之外,还有许多其他方法可以访问存储在 Cloud Storage 存储桶中的数据,具体取决于您想要执行的操作。如果您在服务器上访问数据,我们提供服务器端库,以及JSON和 S3 兼容的XML RESTful API,或者如果您需要编写脚本更改或执行其他管理任务,我们有一个命令行工具会派上用场的。

谷歌云服务器 SDK

Google Cloud 为许多云产品(包括 Cloud Storage)提供高质量的服务器 SDK。这些库在Node.jsJavagoPythonPHPRuby中可用。

有关更多信息,包括安装说明、身份验证和故障排除,请参阅上面链接的特定于平台的文档。

Google Cloud Storage SDK 的示例用法如下所示:

节点.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Cloud Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

爪哇

    // Enable Cloud Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

    // Enable Cloud Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Cloud Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Cloud Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

红宝石

    # Require gcloud
    require "google/cloud"

    # Enable Cloud Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

休息API

如果您使用的是一种没有客户端库的语言,想要做一些客户端库不会做的事情,或者只是有一个您喜欢使用的最喜欢的 HTTP 客户端,Google Cloud Storage 为JSONXML提供了 API .

除了这些存储数据访问 API 之外,要管理用于 Firebase 项目的 Cloud Storage 存储桶,您可以使用Cloud Storage for Firebase API

gsutil

gsutil是一个命令行工具,可让您直接访问 Cloud Storage。您可以使用gsutil执行范围广泛的存储桶和对象管理任务,包括:

  • 上传、下载和删除对象。
  • 列出桶和对象。
  • 移动、复制和重命名对象。
  • 编辑对象和存储桶 ACL。

gsutil允许其他高级操作,例如将文件从一个目录移动到另一个目录,或删除某个位置下的所有文件。

将所有文件从一个引用移动到另一个引用非常简单:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

批量删除引用下的所有文件同样直观:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

请求率

Google Cloud Storage 是一种高度可扩展的服务,它使用自动扩展技术来实现非常高的请求率。

Google Cloud Storage 是一种多租户服务,这意味着用户共享同一组底层资源。为了最好地利用这些共享资源,buckets有一个初始IO容量。

当您计划将 Cloud Storage for Firebase 集成到您的应用程序中时,请考虑您的应用程序为获得良好性能所需的最低请求率,并考虑如何高效地发出请求。查看有关请求率的指南,尤其是提高请求率

对象版本控制

您是否曾经不小心删除了某些内容而没有备份? Google Cloud Storage 支持对象版本控制,它提供了一种自动备份数据并从这些备份中恢复数据的方法。您可以使用gsutil versioning set命令启用对象版本控制:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage 始终选择最新版本,因此如果要恢复对象,您需要使用上述其他 API 或工具之一将所需对象设置为最新版本。

对象生命周期管理

能够自动归档或删除陈旧文件是许多应用程序的一项有用功能。幸运的是,Google Cloud Storage 提供了对象生命周期管理,它允许您在一定时间后删除或归档对象。

考虑一个照片共享应用程序,您希望在一天内删除所有照片。您可以按如下方式设置对象生命周期策略:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

并使用gsutil lifecycle set命令部署它:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

请注意,这适用于存储桶中的所有文件,因此如果您要存储重要的用户备份,并且要长期存储以及每天要删除的照片,您可能需要使用两个单独的存储桶或手动执行删除使用gsutil或您自己的服务器。

应用引擎

App Engine 是一种“平台即服务”,可根据接收到的流量自动扩展后端逻辑。只需上传您的后端代码,Google 就会管理您应用的可用性;没有服务器供您配置或维护。 App Engine 是一种快速简便的方法,可以为您的 Firebase 应用程序添加额外的处理能力或可信的执行。

用于云存储的 Firebase SDK 使用 App Engine 默认存储桶,这意味着如果您构建 App Engine 应用程序,则可以使用内置的 App Engine API 在 Firebase 和 App Engine 之间共享数据。这对于执行音频编码、视频转码和图像转换以及其他计算密集型后台处理非常有用。

App Engine 的 Java、Python 和 go Standard 环境包括 App Engine 图像 API( JavaPython ,它可以调整图像大小、旋转、翻转和裁剪图像,以及返回允许客户端转换的图像服务 URL ,类似于 Cloudinary 和 Imgix。

将现有的 Google Cloud 项目导入 Firebase 时,如果您想让任何现有的 App Engine 对象在 Firebase 中可用,您需要在对象上设置默认访问控制,以允许 Firebase 通过使用gsutil运行以下命令来访问它们:

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

已知的问题

在两种已知情况下您无法导入 App Engine 应用程序:

  1. 该项目包含一个以前的 App Engine 数据存储主/从应用程序。
  2. 该项目有一个以域为前缀的项目 ID,例如: domain.com:project-1234 :project-1234。

在任何一种情况下,该项目都不支持 Cloud Storage for Firebase,您应该创建一个新的 Firebase 项目才能使用 Cloud Storage。联系支持人员,以便我们为您提供帮助。

谷歌云功能(测试版)

Google Cloud Functions是一种轻量级、基于事件的异步计算解决方案,可让您创建小型、单一用途的函数来响应事件,而无需管理服务器或运行时环境。这些功能可用于转码视频、使用机器学习对图像进行分类或将元数据与 Firebase 实时数据库同步。与 App Engine 相比,Cloud Functions 的开销甚至更少,是对 Cloud Storage 中的变化做出反应的最快方式。

谷歌云视觉 API

Google Cloud Vision API通过将强大的机器学习模型封装在易于使用的 API 中,使开发人员能够理解图像的内容。它可以将图像快速分类为数千个类别,检测图像中的单个对象和人脸,查找和读取图像中包含的印刷文字,识别令人反感的内容,甚至提供图像情感分析。

谷歌云语音 API

与 Vision API 类似, Google Cloud Speech API使开发人员能够从存储在 Cloud Storage 中的音频文件中提取文本。 API 可识别 80 多种语言和变体,以支持您的全球用户群。当与Google Cloud Natural Language API结合使用时,开发人员可以提取原始文本并推断该文本的含义。如果需要全球受众,请将其与Google Translate API结合使用,将文本翻译成 90 多种语言。