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.js 、 Java 、 go 、 Python 、 PHP和Ruby中可用。
有关更多信息,包括安装说明、身份验证和故障排除,请参阅上面链接的特定于平台的文档。
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 为JSON和XML提供了 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( Java 、 Python ,它可以调整图像大小、旋转、翻转和裁剪图像,以及返回允许客户端转换的图像服务 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 应用程序:
- 该项目包含一个以前的 App Engine 数据存储主/从应用程序。
- 该项目有一个以域为前缀的项目 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 多种语言。