Проект 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 для доступа к файлам, загруженным через SDK Firebase для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла, или отображение списка всех файлов, доступных по указанной ссылке.
Важно отметить, что в этих запросах используются параметры контроля доступа Google Cloud Storage , а не Firebase Authentication и Cloud Storage Security Rules .
API
Помимо SDK Firebase для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашем хранилище Cloud Storage , в зависимости от ваших задач. Если вы обращаетесь к данным на сервере, мы предлагаем серверные библиотеки, а также совместимый с JSON и S3 XML RESTful API, а если вам нужно вносить изменения с помощью скриптов или выполнять другие административные задачи, у нас есть удобный инструмент командной строки.
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) {});
Java
// 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}"
REST API
Если вы используете язык программирования без клиентской библиотеки, хотите сделать что-то, чего не поддерживают клиентские библиотеки, или просто предпочитаете использовать свой любимый HTTP-клиент, Google Cloud Storage предлагает API как для JSON , так и для XML .
В дополнение к этим API для доступа к данным хранилища, для управления сегментами Cloud Storage, используемыми в проектах Firebase, вы можете использовать API Cloud Storage for Firebase .
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 capacity).
При планировании интеграции 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 Cloud Functions (бета-версия)
Google Cloud Functions — это легковесное, основанное на событиях, асинхронное вычислительное решение, позволяющее создавать небольшие, одноцелевые функции, реагирующие на события без необходимости управления сервером или средой выполнения. Эти функции можно использовать для транскодирования видео, классификации изображений с помощью машинного обучения или синхронизации метаданных с Firebase Realtime Database . Обладая ещё меньшими накладными расходами, чем App Engine , Cloud Functions — это самый быстрый способ реагировать на изменения в Cloud Storage .
API Google Cloud Vision
API Google Cloud Vision позволяет разработчикам понимать содержимое изображений, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и читает печатные слова, содержащиеся в изображениях, идентифицирует оскорбительный контент и даже предоставляет анализ эмоциональной окраски изображений.
Google Cloud Speech API
Подобно API Vision, API Google Cloud Speech позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и их вариантов, что позволяет поддерживать глобальную пользовательскую базу. В сочетании с API Google Cloud Natural Language разработчики могут как извлекать исходный текст, так и определять его смысл. А если требуется глобальная аудитория, можно использовать API Google Translate для перевода текста на более чем 90 языков.
Google App Engine
Google App Engine — это платформа как услуга (Platform as a Service), которая автоматически масштабирует бэкэнд-логику в зависимости от объема трафика. Просто загрузите свой бэкэнд-код, и Google будет управлять доступностью вашего приложения; вам не нужно выделять или обслуживать серверы. App Engine — это быстрый и простой способ добавить дополнительную вычислительную мощность или обеспечить доверенное выполнение для вашего приложения Firebase.
Если у вас есть корзина Cloud Storage по умолчанию с именем в форматеPROJECT_ID .appspot.com , то данные автоматически передаются в приложение App Engine в вашем проекте. Это означает, что если вы создадите приложение App Engine , вы сможете использовать встроенные API App Engine для обмена данными между этим хранилищем и App Engine . Это полезно для кодирования аудио, перекодирования видео и преобразования изображений, а также для других ресурсоемких фоновых процессов.
Стандартные среды разработки App Engine для Java, Python и Go включают API App Engine Images ( 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 . Свяжитесь со службой поддержки , чтобы мы могли вам помочь.