Проект 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 . Это полезно для кодирования звука, транскодирования видео и преобразования изображений, а также для другой фоновой обработки, требующей больших вычислений.
Стандартные среды 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 . Свяжитесь со службой поддержки , чтобы мы могли вам помочь.