Projekt Firebase to tak naprawdę projekt Google Cloud z włączonymi dodatkowymi konfiguracjami i usługami Firebase. Oznacza to, że każdy folder Cloud Storage, którego używasz w Cloud Storage for Firebase, jest dostępny w Google Cloud (w tym konsola i interfejsy API).
Integracja z Google Cloud, w tym importowanie istniejących Cloud Storage bucketów, wymaga projektu Firebase korzystającego z abonamentu Blaze z opłatami według wykorzystania.
Informacje o kontach usługi
Firebase używa Google Cloudkont usługi do obsługi i zarządzania usługami bez udostępniania danych logowania użytkownika. Gdy utworzysz projekt Firebase, który korzysta z Cloud Storage, możesz zauważyć, że odpowiednie konto usługi jest już dostępne w projekcie:
.
Więcej informacji znajdziesz w artykule Omówienie kont usługi Firebase.
Google Cloud Storage
Możesz używać interfejsów API Google Cloud Storage, aby uzyskać dostęp do plików przesłanych za pomocą pakietów SDK Firebase dla Cloud Storage, zwłaszcza w celu wykonywania bardziej złożonych operacji, takich jak kopiowanie lub przenoszenie pliku czy wyświetlanie listy wszystkich plików dostępnych w odnośniku.
Pamiętaj, że te prośby używają Google Cloud Storage opcji kontroli dostępu, a nie Firebase Authentication ani Cloud Storage Security Rules.
Interfejsy API
Oprócz pakietów SDK Firebase do usługi Cloud Storage istnieje wiele innych sposobów uzyskiwania dostępu do danych przechowywanych w zasobach Cloud Storage, w zależności od tego, co chcesz zrobić. Jeśli chcesz uzyskać dostęp do danych na serwerze, oferujemy biblioteki po stronie serwera, a także interfejs JSON
i interfejs XML
RESTful API zgodny z S3. Jeśli chcesz wprowadzić zmiany w skryptach lub wykonać inne zadania administracyjne, możesz skorzystać z naszego narzędzia wiersza poleceń.
Google Cloud pakiety SDK serwera
Firma Google Cloud oferuje wysokiej jakości pakiety SDK serwera dla wielu usług Google Cloud, w tym Cloud Storage. Te biblioteki są dostępne w Node.js, Java, Go, Python, PHP i Ruby.
Więcej informacji, w tym instrukcje instalacji, uwierzytelniania i rozwiązywania problemów, znajdziesz w powyżej wymienionej dokumentacji dotyczącej danej platformy.
Poniżej znajdziesz przykład użycia pakietu 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();
Go
// 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');
Ruby
# 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}"
Interfejs API typu REST
Jeśli używasz języka, dla którego nie ma biblioteki klienta, chcesz wykonać działanie, którego nie obsługują biblioteki klienta lub po prostu masz ulubionego klienta HTTP, którego wolisz używać, Google Cloud Storage oferuje interfejsy API zarówno dla JSON, jak i XML.
Oprócz tych interfejsów API dostępu do danych możesz też używać interfejsu Cloud Storage for Firebase API do zarządzania zasobnikami Cloud Storage w projektach Firebase.
gsutil
gsutil
to narzędzie wiersza poleceń, które zapewnia bezpośredni dostęp do usługi Cloud Storage. Za pomocą gsutil
możesz wykonywać wiele zadań związanych z zarządzaniem zasobnikami i obiektami, takich jak:
- przesyłać, pobierać i usuwać obiekty;
- Wyświetlanie zasobników i obiektów.
- przenoszenie, kopiowanie i zmienianie nazw obiektów;
- edytować listy kontroli dostępu obiektów i zasobników.
gsutil
umożliwiają wykonywanie innych zaawansowanych operacji, takich jak przenoszenie plików z jednego katalogu do drugiego czy usuwanie wszystkich plików z określonej lokalizacji.
Przenoszenie wszystkich plików z jednego odwołania do drugiego jest bardzo proste:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Usuwanie wszystkich plików pod referencją w grupie jest równie proste:
# 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
Prośby o stawki
Google Cloud Storage to usługa o wysokiej skalowalności, która korzysta z technologii autoskalowania w celu osiągnięcia bardzo wysokiej szybkości przetwarzania żądań.
Google Cloud Storage to usługa wielodzierżawcza, co oznacza, że użytkownicy korzystają z tych samych zasobów. Aby jak najlepiej wykorzystać te współdzielone zasoby, zbiorniki mają początkową pojemność we/wy.
Planując integrację Cloud Storage for Firebase z aplikacją, zastanów się nad minimalną częstotliwością żądań, jakiej potrzebuje aplikacja, aby zapewnić dobrą wydajność, oraz nad efektywnością wysyłania żądań. Zapoznaj się z wytycznymi dotyczącymi częstotliwości wysyłania żądań, a zwłaszcza z zwiększaniem częstotliwości wysyłania żądań.
Obsługa wersji obiektów
Czy zdarzyło Ci się kiedyś usunąć coś przez przypadek, nie mając kopii zapasowej?
Google Cloud Storage obsługuje obsługę wersji obiektów, która umożliwia automatyczne tworzenie kopii zapasowych danych i przywracanie ich z tych kopii. Obsługę wersji obiektów możesz włączyć za pomocą polecenia gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage zawsze pobiera najnowszą wersję, więc jeśli chcesz przywrócić obiekt, musisz użyć jednego z wymienionych wyżej interfejsów API lub narzędzi, aby ustawić wybrany obiekt jako najnowszy.
Zarządzanie cyklem życia obiektu
Możliwość automatycznego archiwizowania lub usuwania nieaktualnych plików jest przydatną funkcją w wielu zastosowaniach. Na szczęście Google Cloud Storage udostępnia zarządzanie cyklem życia obiektów, które pozwala usuwać lub archiwizować obiekty po określonym czasie.
Wyobraź sobie, że chcesz usunąć wszystkie zdjęcia z aplikacji do udostępniania zdjęć w ciągu 1 dnia. Aby skonfigurować zasady cyklu życia obiektu, wykonaj te czynności:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Wdróż je za pomocą polecenia gsutil
lifecycle set
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Pamiętaj, że dotyczy to wszystkich plików w zasobniku, więc jeśli przechowujesz ważne kopie zapasowe użytkowników, które chcesz przechowywać przez długi czas, obok zdjęć, które chcesz usuwać codziennie, możesz użyć 2 oddzielnych zasobników lub usunąć pliki ręcznie za pomocą gsutil
lub własnego serwera.
Google Cloud Functions (beta)
Google Cloud Functions to wymagające niewielu zasobów rozwiązanie oparte na zdarzeniach i obliczeniach asynchronicznych. Umożliwia ono tworzenie niewielkich funkcji realizujących jeden cel i reagujących na zdarzenia bez konieczności zarządzania serwerem lub środowiskiem wykonawczym. Te funkcje można stosować do transkodowania wideo, klasyfikowania obrazów za pomocą uczenia maszynowego lub synchronizowania metadanych za pomocą funkcji Firebase Realtime Database. Cloud Functions to najszybszy sposób na reagowanie na zmiany w App Engine, ponieważ wymaga jeszcze mniej zasobów niż App Engine.Cloud Storage
Google Cloud Vision API
Interfejs Google Cloud Vision API umożliwia deweloperom analizowanie treści obrazu dzięki umieszczeniu zaawansowanych modeli systemów uczących się w prostym interfejsie API. Szybko klasyfikuje obrazy w tysiące kategorii, wykrywa poszczególne obiekty i twarze na obrazach, znajduje i czyta słowa zawarte na obrazach, identyfikuje obraźliwe treści, a nawet przeprowadza analizę nastroju obrazu.
Google Cloud Speech API
Podobnie jak interfejs Vision API, Google Cloud Speech API umożliwia deweloperom wyodrębnianie tekstu z pliku audio przechowywanego w Cloud Storage. Interfejs API rozpoznaje ponad 80 języków i wariantów, aby obsługiwać globalne grono użytkowników. W połączeniu z interfejsem Google Cloud Natural Language API deweloperzy mogą wyodrębniać tekst źródłowy i wyciągać z niego znaczenie. Jeśli chcesz dotrzeć do odbiorców na całym świecie, możesz połączyć tę funkcję z interfejsem Google Translate API, aby przetłumaczyć tekst na ponad 90 języków.
Google App Engine
Google App Engine to „platforma jako usługa”, która automatycznie skaluje logikę zaplecza w odpowiedzi na ilość otrzymywanego ruchu. Wystarczy przesłać kod backendu, a Google będzie zarządzać dostępnością aplikacji. Nie musisz udostępniać ani obsługiwać żadnych serwerów. App Engine to szybki i prosty sposób na zwiększenie mocy obliczeniowej lub zaufane wykonywanie kodu w aplikacji Firebase.
Jeśli masz domyślny zasób Cloud Storage o nazwie w formacie PROJECT_ID.appspot.com
Standardowe środowiska w Javie, Pythonie i Go, które obejmują interfejs API App Engine Images (Java | Python | Go), umożliwiają zmianę rozmiaru, obracanie, przekręcanie i przycinanie obrazu, a także zwracanie adresu URL służącego do wyświetlania obrazu. Umożliwia to przekształcenia po stronie klienta, podobne do tych w Cloudinary i Imgix.App Engine
Jeśli chcesz zaimportować istniejący projekt Google Cloud do Firebase i uzyskać dostęp do istniejących obiektów App Engine w Firebase, musisz ustawić domyślną kontrolę dostępu do tych obiektów, aby umożliwić Firebase uzyskanie do nich dostępu. Aby to zrobić, uruchom ten polecenie za pomocą gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Informacje dotyczące plików Firebase Security Rules i App Engine
Jeśli masz domyślny zasób Cloud Storage o nazwie *.appspot.com
Jeśli skonfigurujesz Firebase Security Rules na dostęp publiczny (nieautoryzowany), nowo przesłane pliki App Engine będą również publicznie dostępne.
Znane problemy dotyczące Cloud Storage i App Engine
Istnieją 2 znane przypadki, w których nie możesz zaimportować aplikacji App Engine:
- Projekt zawiera aplikację App Engine Datastore Master/Slave.
- Projekt ma identyfikator z prefiksem domeny, np.
domain.com:project-1234
.
W obu przypadkach projekt nie będzie obsługiwał funkcji Cloud Storage for Firebase. Aby korzystać z funkcji Cloud Storage, musisz utworzyć nowy projekt Firebase. Skontaktuj się z zespołem pomocy, aby uzyskać pomoc.