Проект Firebase на самом деле представляет собой просто проект Google Cloud , для которого включены дополнительные конфигурации и сервисы, специфичные для Firebase . Это означает, что каждый сегмент Cloud Storage , который вы используете с Cloud Storage for Firebase доступен в Google Cloud (включая его консоль и API).
Для интеграции с Google Cloud , включая импорт существующих сегментов Cloud Storage , требуется проект Firebase с тарифным планом Blaze с оплатой по мере использования .
Рекомендации по учетным записям служб
Firebase использует учетные записи сервисов Google Cloud для работы и управления сервисами без раскрытия учетных данных пользователя. Когда вы создаете проект Firebase, использующий Cloud Storage , вы можете заметить, что в вашем проекте уже доступна соответствующая учетная запись службы:
. Дополнительную информацию см. в разделе Обзор учетных записей служб Firebase .
Google Cloud Storage
Вы можете использовать API-интерфейсы Google Cloud Storage для доступа к файлам, загруженным через Firebase SDK для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла или перечисление всех файлов, доступных по ссылке.
Важно отметить, что в этих запросах используются параметры контроля доступа к Google Cloud Storage , а не правила Firebase Authentication и Cloud Storage Security Rules .
API
Помимо Firebase SDK для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашем сегменте Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем серверные библиотеки, а также XML
RESTful API, совместимый JSON
и S3, или если вам нужно внести изменения в сценарий или выполнить другие административные задачи, у нас есть инструмент командной строки, который вам пригодится.
SDK сервера Google Cloud
Google Cloud предлагает высококачественные серверные SDK для ряда облачных продуктов, включая Cloud Storage . Эти библиотеки доступны в Node.js , Java , go , Python , PHP и Ruby .
Для получения дополнительной информации, включая инструкции по установке, аутентификации и устранению неполадок, обратитесь к документации для конкретной платформы, указанной выше.
Пример использования SDK Google Cloud Storage показан ниже:
Node.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) }
Питон
# 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 предлагает API как для JSON , так и для XML .
В дополнение к этим API доступа к данным хранилища для управления сегментами Cloud Storage для использования в проектах Firebase вы можете использовать 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 — это мультиарендная служба, то есть пользователи используют один и тот же набор базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, сегменты имеют начальную емкость ввода-вывода.
Планируя интегрировать 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
или вашего собственного сервера.
Облачные функции Google (бета-версия)
Google Cloud Functions — это легкое асинхронное вычислительное решение на основе событий, которое позволяет создавать небольшие одноцелевые функции, которые реагируют на события без необходимости управлять сервером или средой выполнения. Эти функции можно использовать для перекодирования видео, классификации изображений с помощью машинного обучения или синхронизации метаданных с Firebase Realtime Database . Облачные функции обеспечивают еще меньшие накладные расходы, чем App Engine , и представляют собой самый быстрый способ реагировать на изменения в Cloud Storage .
API Google Cloud Vision
API Google Cloud Vision позволяет разработчикам понимать содержимое изображения, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и считывает печатные слова, содержащиеся в изображениях, идентифицирует оскорбительный контент и даже обеспечивает анализ настроения изображений.
API облачной речи Google
Подобно Vision API, Google Cloud Speech API позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и их вариантов для поддержки вашей глобальной базы пользователей. В сочетании с API Google Cloud Natural Language разработчики могут как извлекать необработанный текст, так и определять его значение. А если требуется глобальная аудитория, добавьте к этому API Google Translate , чтобы перевести текст на более чем 90 языков.
Google App Engine
Google App Engine — это «платформа как услуга», которая автоматически масштабирует внутреннюю логику в зависимости от объема получаемого трафика. Просто загрузите свой серверный код, и Google будет управлять доступностью вашего приложения; у вас нет серверов, которые вы могли бы предоставлять или обслуживать. App Engine — это быстрый и простой способ добавить дополнительную вычислительную мощность или надежное выполнение к вашему приложению Firebase.
Если у вас есть сегмент Cloud Storage по умолчанию с форматом имениPROJECT_ID .appspot.com
, он автоматически будет доступен приложению App Engine в вашем проекте. Это означает, что если вы создаете приложение App Engine , вы можете использовать встроенные API App Engine для обмена данными между этим сегментом и App Engine . Это полезно для кодирования звука, транскодирования видео и преобразования изображений, а также для другой фоновой обработки, требующей больших вычислений.
gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Рекомендации по Firebase Security Rules и файлам App Engine
*.appspot.com
, то в вашем проекте также есть приложение App Engine , которое использует этот сегмент.
Известные проблемы с Cloud Storage и App Engine
Проект содержит бывшее App Engine Datastore Master/Slave. Проект имеет идентификатор проекта с префиксом домена, например: domain.com:project-1234
.
Проект Firebase на самом деле представляет собой просто проект Google Cloud , для которого включены дополнительные конфигурации и сервисы, специфичные для Firebase . Это означает, что каждый сегмент Cloud Storage , который вы используете с Cloud Storage for Firebase доступен в Google Cloud (включая его консоль и API).
Для интеграции с Google Cloud , включая импорт существующих сегментов Cloud Storage , требуется проект Firebase с тарифным планом Blaze с оплатой по мере использования .
Рекомендации по учетным записям служб
Firebase использует учетные записи сервисов Google Cloud для работы и управления сервисами без раскрытия учетных данных пользователя. Когда вы создаете проект Firebase, использующий Cloud Storage , вы можете заметить, что в вашем проекте уже доступна соответствующая учетная запись службы:
. Дополнительную информацию см. в разделе Обзор учетных записей служб Firebase .
Google Cloud Storage
Вы можете использовать API-интерфейсы Google Cloud Storage для доступа к файлам, загруженным через Firebase SDK для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла или перечисление всех файлов, доступных по ссылке.
Важно отметить, что в этих запросах используются параметры контроля доступа к Google Cloud Storage , а не правила Firebase Authentication и Cloud Storage Security Rules .
API
Помимо Firebase SDK для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашем сегменте Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем серверные библиотеки, а также XML
RESTful API, совместимый JSON
и S3, или если вам нужно внести изменения в сценарий или выполнить другие административные задачи, у нас есть инструмент командной строки, который вам пригодится.
SDK сервера Google Cloud
Google Cloud предлагает высококачественные серверные SDK для ряда облачных продуктов, включая Cloud Storage . Эти библиотеки доступны в Node.js , Java , go , Python , PHP и Ruby .
Для получения дополнительной информации, включая инструкции по установке, аутентификации и устранению неполадок, обратитесь к документации для конкретной платформы, указанной выше.
Пример использования SDK Google Cloud Storage показан ниже:
Node.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) }
Питон
# 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 предлагает API как для JSON , так и для XML .
В дополнение к этим API доступа к данным хранилища для управления сегментами Cloud Storage для использования в проектах Firebase вы можете использовать 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 — это мультиарендная служба, то есть пользователи используют один и тот же набор базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, сегменты имеют начальную емкость ввода-вывода.
Планируя интегрировать 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
или вашего собственного сервера.
Облачные функции Google (бета-версия)
Google Cloud Functions — это легкое асинхронное вычислительное решение на основе событий, которое позволяет создавать небольшие одноцелевые функции, которые реагируют на события без необходимости управлять сервером или средой выполнения. Эти функции можно использовать для перекодирования видео, классификации изображений с помощью машинного обучения или синхронизации метаданных с Firebase Realtime Database . Облачные функции обеспечивают еще меньшие накладные расходы, чем App Engine , и представляют собой самый быстрый способ реагировать на изменения в Cloud Storage .
API Google Cloud Vision
API Google Cloud Vision позволяет разработчикам понимать содержимое изображения, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и считывает печатные слова, содержащиеся в изображениях, идентифицирует оскорбительный контент и даже обеспечивает анализ настроения изображений.
API облачной речи Google
Подобно Vision API, Google Cloud Speech API позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и их вариантов для поддержки вашей глобальной базы пользователей. В сочетании с API Google Cloud Natural Language разработчики могут как извлекать необработанный текст, так и определять его значение. А если требуется глобальная аудитория, добавьте к этому API Google Translate , чтобы перевести текст на более чем 90 языков.
Google App Engine
Google App Engine — это «платформа как услуга», которая автоматически масштабирует внутреннюю логику в зависимости от объема получаемого трафика. Просто загрузите свой серверный код, и Google будет управлять доступностью вашего приложения; у вас нет серверов, которые вы могли бы предоставлять или обслуживать. App Engine — это быстрый и простой способ добавить дополнительную вычислительную мощность или надежное выполнение к вашему приложению Firebase.
Если у вас есть сегмент Cloud Storage по умолчанию с форматом имениPROJECT_ID .appspot.com
, он автоматически будет доступен приложению App Engine в вашем проекте. Это означает, что если вы создаете приложение App Engine , вы можете использовать встроенные API App Engine для обмена данными между этим сегментом и App Engine . Это полезно для кодирования звука, транскодирования видео и преобразования изображений, а также для другой фоновой обработки с интенсивными вычислениями.
gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Рекомендации по Firebase Security Rules и файлам App Engine
*.appspot.com
, то в вашем проекте также есть приложение App Engine , которое использует этот сегмент.
Известные проблемы с Cloud Storage и App Engine
Проект содержит бывшее App Engine Datastore Master/Slave. Проект имеет идентификатор проекта с префиксом домена, например: domain.com:project-1234
.
Проект Firebase на самом деле представляет собой просто проект Google Cloud , для которого включены дополнительные конфигурации и сервисы, специфичные для Firebase . Это означает, что каждый сегмент Cloud Storage , который вы используете с Cloud Storage for Firebase доступен в Google Cloud (включая его консоль и API).
Для интеграции с Google Cloud , включая импорт существующих сегментов Cloud Storage , требуется проект Firebase с тарифным планом Blaze с оплатой по мере использования .
Рекомендации по учетным записям служб
Firebase использует учетные записи сервисов Google Cloud для работы и управления сервисами без раскрытия учетных данных пользователя. Когда вы создаете проект Firebase, использующий Cloud Storage , вы можете заметить, что в вашем проекте уже доступна соответствующая учетная запись службы:
. Дополнительную информацию см. в разделе Обзор учетных записей служб Firebase .
Google Cloud Storage
Вы можете использовать API-интерфейсы Google Cloud Storage для доступа к файлам, загруженным через Firebase SDK для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла или перечисление всех файлов, доступных по ссылке.
Важно отметить, что в этих запросах используются параметры контроля доступа к Google Cloud Storage , а не правила Firebase Authentication и Cloud Storage Security Rules .
API
Помимо Firebase SDK для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашей корзине Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем серверные библиотеки, а также XML
RESTful API, совместимый JSON
и S3, или если вам нужно внести изменения в сценарий или выполнить другие административные задачи, у нас есть инструмент командной строки, который вам пригодится.
SDK сервера Google Cloud
Google Cloud предлагает высококачественные серверные SDK для ряда облачных продуктов, включая Cloud Storage . Эти библиотеки доступны в Node.js , Java , go , Python , PHP и Ruby .
Для получения дополнительной информации, включая инструкции по установке, аутентификации и устранению неполадок, обратитесь к документации по конкретной платформе, указанной выше.
Пример использования SDK Google Cloud Storage показан ниже:
Node.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) }
Питон
# 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 предлагает API как для JSON , так и для XML .
В дополнение к этим API доступа к данным хранилища для управления сегментами Cloud Storage для использования в проектах Firebase вы можете использовать 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 — это мультиарендная служба, то есть пользователи используют один и тот же набор базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, сегменты имеют начальную емкость ввода-вывода.
Планируя интегрировать 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
или вашего собственного сервера.
Облачные функции Google (бета-версия)
Google Cloud Functions — это легкое асинхронное вычислительное решение на основе событий, которое позволяет создавать небольшие одноцелевые функции, которые реагируют на события без необходимости управлять сервером или средой выполнения. Эти функции можно использовать для перекодирования видео, классификации изображений с помощью машинного обучения или синхронизации метаданных с Firebase Realtime Database . Облачные функции обеспечивают еще меньшие накладные расходы, чем App Engine , и представляют собой самый быстрый способ реагировать на изменения в Cloud Storage .
API Google Cloud Vision
API Google Cloud Vision позволяет разработчикам понимать содержимое изображения, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и считывает печатные слова, содержащиеся в изображениях, идентифицирует оскорбительный контент и даже обеспечивает анализ настроения изображений.
API облачной речи Google
Подобно Vision API, Google Cloud Speech API позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и их вариантов для поддержки вашей глобальной базы пользователей. В сочетании с API Google Cloud Natural Language разработчики могут как извлекать необработанный текст, так и определять его значение. А если требуется глобальная аудитория, добавьте к этому API Google Translate , чтобы перевести текст на более чем 90 языков.
Google App Engine
Google App Engine — это «платформа как услуга», которая автоматически масштабирует внутреннюю логику в зависимости от объема получаемого трафика. Просто загрузите свой серверный код, и Google будет управлять доступностью вашего приложения; у вас нет серверов, которые вы могли бы предоставлять или обслуживать. App Engine — это быстрый и простой способ добавить дополнительную вычислительную мощность или надежное выполнение к вашему приложению Firebase.
Если у вас есть сегмент Cloud Storage по умолчанию с форматом имениPROJECT_ID .appspot.com
, он автоматически будет доступен приложению App Engine в вашем проекте. Это означает, что если вы создаете приложение App Engine , вы можете использовать встроенные API App Engine для обмена данными между этим сегментом и App Engine . Это полезно для кодирования звука, транскодирования видео и преобразования изображений, а также для другой фоновой обработки с интенсивными вычислениями.
gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Рекомендации по Firebase Security Rules и файлам App Engine
*.appspot.com
, то в вашем проекте также есть приложение App Engine , которое использует этот сегмент.
Известные проблемы с Cloud Storage и App Engine
Проект содержит бывшее App Engine Datastore Master/Slave. Проект имеет идентификатор проекта с префиксом домена, например: domain.com:project-1234
.
Проект Firebase на самом деле представляет собой просто проект Google Cloud , для которого включены дополнительные конфигурации и сервисы, специфичные для Firebase . Это означает, что каждый сегмент Cloud Storage , который вы используете с Cloud Storage for Firebase доступен в Google Cloud (включая его консоль и API).
Для интеграции с Google Cloud , включая импорт существующих сегментов Cloud Storage , требуется проект Firebase с тарифным планом Blaze с оплатой по мере использования .
Рекомендации по учетным записям служб
Firebase использует учетные записи сервисов Google Cloud для работы и управления сервисами без раскрытия учетных данных пользователя. Когда вы создаете проект Firebase, использующий Cloud Storage , вы можете заметить, что в вашем проекте уже доступна соответствующая учетная запись службы:
. Дополнительную информацию см. в разделе Обзор учетных записей служб Firebase .
Google Cloud Storage
Вы можете использовать API-интерфейсы Google Cloud Storage для доступа к файлам, загруженным через Firebase SDK для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла или перечисление всех файлов, доступных по ссылке.
Важно отметить, что в этих запросах используются параметры контроля доступа к Google Cloud Storage , а не правила Firebase Authentication и Cloud Storage Security Rules .
API
В дополнение к SDK Firebase SDK для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашем ведре Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем библиотеки на стороне сервера, а также API, совместимый с JSON
и S3 XML
, или если вам нужно сценарии сценария или выполнять другие административные задачи, у нас есть инструмент командной строки, который пригодится.
Google Cloud Server SDK
Google Cloud предлагает высококачественные серверы SDK для ряда облачных продуктов, включая Cloud Storage . Эти библиотеки доступны в Node.js , Java , Go , Python , PHP и Ruby .
Для получения дополнительной информации, включая инструкции по установке, аутентификацию и устранение неполадок, обратитесь к документации по конкретной платформе, связанной выше.
Пример использования для Google Cloud Storage SDK показан ниже:
Node.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) }
Питон
# 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}"
REST API
Если вы используете язык без клиентской библиотеки, хотите сделать то, чего не делают клиентские библиотеки, или просто у вас есть любимый клиент HTTP, который вы предпочитаете использовать, Google Cloud Storage предлагает API как для JSON , так и для XML .
В дополнение к этим API доступа к данным хранилища, для управления ковшами облачного хранилища для использования в проектах Firebase, вы можете использовать облачное хранилище для API Firebase API .
gsutil
gsutil
- это инструмент командной строки, который дает вам прямой доступ к Cloud Storage . Вы можете использовать gsutil
для выполнения широкого спектра задач ведра и управления объектами, включая:
- Загрузка, загрузка и удаление объектов.
- Список ведер и объектов.
- Перемещение, копирование и переименование объектов.
- Редактирование объекта и ковша ACLS.
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 -это мультитенантная служба, что означает, что пользователи делятся одним и тем же набором базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, ведра обладают начальной емкостью ввода -вывода.
Поскольку вы планируете интегрировать Cloud Storage for Firebase в ваше приложение, подумайте о минимальной скорости запросов, который нуждается в хорошей производительности, и о эффективном выполнении запросов. Просмотрите руководящие принципы о ставках запросов , и особенно повышение ставок запросов .
Объектная версия
Вы когда -нибудь что -то удаляли что -то случайно и не имели резервной копии? Google Cloud Storage поддерживает версии объектов , которое обеспечивает автоматический способ поддержать ваши данные и восстановить из этих резервных копий. Вы можете включить использование версий объекта, используя команду Set 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
или вашего собственного сервера.
Google Cloud Functions (бета)
Functions Google Cloud -это легкое, асинхронное вычислительное решение, основанное на событиях, которое позволяет создавать небольшие одноцелевые функции, которые реагируют на события без необходимости управления сервером или средой времени выполнения. Эти функции можно использовать для транскодирования видео, классификации изображений с использованием машинного обучения или синхронизации метаданных с Firebase Realtime Database . С еще меньшим количеством накладных расходов, чем App Engine , облачные функции являются самым быстрым способом реагировать на изменения в Cloud Storage .
Google Cloud Vision API
API Google Cloud Vision позволяет разработчикам понимать содержание изображения, инкапсулируя мощные модели машинного обучения в простые в использовании API. Он быстро классифицирует изображения на тысячи категорий, обнаруживает отдельные объекты и лица в изображениях, находит и считывает печатные слова, содержащиеся в изображениях, идентифицирует наступательное содержание и даже обеспечивает анализ настроений изображения.
Google Cloud Speech API
Подобно API Vision API, API Google Cloud Speech позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и вариантов, чтобы поддержать вашу глобальную базу пользователей. В сочетании с API Google Cloud Natural Language разработчики могут извлечь необработанный текст и вывести значение об этом тексте. И если требуется глобальная аудитория, соедините это с Google Translate API, чтобы перевести текст на 90+ языков.
Google App Engine
Google App Engine - это «платформа как сервис», которая автоматически масштабирует логику бэкэнд в ответ на сумму трафика, который он получает. Просто загрузите свой бэкэнд -код, и Google будет управлять доступностью вашего приложения; У вас нет серверов, чтобы вы могли обеспечить или поддерживать. App Engine - быстрый и простой способ добавления дополнительной мощности обработки или доверенного выполнения в ваше приложение Firebase.
Если у вас есть Cloud Storage по умолчанию с форматом имениPROJECT_ID .appspot.com
, затем автоматически обменивается приложением App Engine в вашем проекте. Это означает, что если вы создаете приложение App Engine , вы можете использовать встроенные API App Engine API для обмена данными между этим ведром и App Engine . Это полезно для выполнения кодирования аудио, транскодирования видео и преобразований изображений, а также для других вычислений.
gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Соображения по Firebase Security Rules и файлам App Engine
*.appspot.com
, тогда у вашего проекта также есть приложение App Engine , которое делится этим ведром.
Известные проблемы для Cloud Storage и App Engine
Проект содержит бывшее App Engine Datastore Master/Slave приложения. Например, в проекте есть идентификатор проекта домена, например: domain.com:project-1234
.