Проект 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 SDKs для Cloud Storage , есть ряд других способов доступа к данным, хранящимся в вашем контейнере Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем библиотеки на стороне сервера, а также совместимый с JSON
и S3 XML
RESTful API, или если вам нужно записать изменения в скрипт или выполнить другие административные задачи, у нас есть инструмент командной строки, который вам пригодится.
SDK сервера Google Cloud
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 доступа к данным хранилища, для управления контейнерами Cloud Storage для использования в проектах Firebase можно использовать API Cloud Storage для Firebase .
gsutil
gsutil
— это инструмент командной строки, который дает вам прямой доступ к Cloud Storage . Вы можете использовать gsutil
для выполнения широкого спектра задач по управлению контейнерами и объектами, включая:
- Загрузка, скачивание и удаление объектов.
- Перечисление сегментов и объектов.
- Перемещение, копирование и переименование объектов.
- Редактирование списков контроля доступа к объектам и контейнерам.
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 поддерживает Object Versioning , что обеспечивает автоматический способ резервного копирования ваших данных и восстановления из этих резервных копий. Вы можете включить Object Versioning с помощью команды gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage всегда выбирает самую последнюю версию, поэтому, если вы хотите восстановить объект, вам необходимо использовать один из других API или инструментов, указанных выше, чтобы установить нужный объект как самый последний.
Управление жизненным циклом объекта
Возможность автоматически архивировать или удалять устаревшие файлы является полезной функцией для многих приложений. К счастью, Google Cloud Storage предоставляет Object Lifecycle Management , что позволяет удалять или архивировать объекты по истечении определенного периода времени.
Рассмотрим приложение для обмена фотографиями, в котором вы хотите, чтобы все фотографии были удалены в течение одного дня. Вы можете настроить политику жизненного цикла объекта следующим образом:
// 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 (бета-версия)
Google Cloud Functions — это легкое, основанное на событиях, асинхронное вычислительное решение, позволяющее создавать небольшие, одноцелевые функции, которые реагируют на события без необходимости управления сервером или средой выполнения. Эти функции можно использовать для перекодирования видео, классификации изображений с использованием машинного обучения или синхронизации метаданных с Firebase Realtime Database . С еще меньшими накладными расходами, чем App Engine , Cloud Functions — это самый быстрый способ реагирования на изменения в Cloud Storage .
API Google Cloud Vision
API Google Cloud Vision позволяет разработчикам понимать содержание изображения, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и считывает печатные слова, содержащиеся на изображениях, определяет оскорбительное содержимое и даже обеспечивает анализ настроений изображений.
API Google Cloud Speech
Подобно Vision API, Google Cloud Speech API позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и вариантов для поддержки вашей глобальной базы пользователей. В сочетании с Google Cloud Natural Language API разработчики могут как извлекать необработанный текст, так и делать выводы о значении этого текста. А если требуется глобальная аудитория, соедините это с 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 для обмена данными между этим контейнером и App Engine . Это полезно для выполнения кодирования аудио, перекодирования видео и преобразования изображений, а также для другой интенсивной фоновой обработки.
Стандартные среды Java, Python и Go для App Engine включают API изображений App Engine ( Java | Python | Go ), который позволяет изменять размер, поворачивать, переворачивать и обрезать изображение, а также возвращать URL-адрес обслуживания изображения, позволяющий выполнять преобразования на стороне клиента, аналогично Cloudinary и Imgix.
При импорте существующего проекта Google Cloud в Firebase, если вы хотите сделать какие-либо существующие объекты App Engine доступными в Firebase, вам необходимо установить контроль доступа по умолчанию для ваших объектов, чтобы разрешить Firebase доступ к ним, выполнив следующую команду с помощью gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Рекомендации по Firebase Security Rules и файлам App Engine
Если у вас есть контейнер Cloud Storage по умолчанию с именем в формате*.appspot.com
, то в вашем проекте также есть приложение App Engine , которое использует этот контейнер.
Если вы настроите Firebase Security Rules для публичного (неаутентифицированного) доступа , вы также сделаете общедоступными вновь загруженные файлы App Engine .
Известные проблемы с Cloud Storage и App Engine
Известны два случая, когда вы не сможете импортировать приложение App Engine :
- Проект содержит бывшее App Engine Datastore Master/Slave.
- Проект имеет идентификатор проекта с префиксом домена, например:
domain.com:project-1234
.
В любом из этих случаев проект не будет поддерживать Cloud Storage for Firebase , и вам следует создать новый проект Firebase, чтобы использовать Cloud Storage . Обратитесь в службу поддержки , чтобы мы могли вам помочь.