Projekt Firebase to w rzeczywistości tylko projekt Google Cloud, w którym włączono dodatkowe konfiguracje i usługi specyficzne dla Firebase. Oznacza to, że każdy zasobnik Cloud Storage używany w Cloud Storage for Firebase jest dostępny w Google Cloud (w tym w konsoli i interfejsach API).
Wskazówki dotyczące kont usługi
Firebase używa kont usługi Google Cloud do obsługi i zarządzania usługami
bez udostępniania danych logowania użytkownika. Gdy tworzysz projekt Firebase, który korzysta z
Cloud Storage, możesz zauważyć, że w projekcie jest
już dostępne odpowiednie konto usługi:
.
Więcej informacji znajdziesz w artykule
Omówienie kont usługi Firebase.
Google Cloud Storage
Możesz używać interfejsów Google Cloud Storage API do uzyskiwania dostępu do plików przesłanych za pomocą pakietów Firebase SDK dla Cloud Storage, zwłaszcza do wykonywania bardziej złożonych operacji, takich jak kopiowanie lub przenoszenie pliku czy wyświetlanie listy wszystkich plików dostępnych w odniesieniu.
Pamiętaj, że te żądania korzystają z Google Cloud Storage opcji kontroli dostępu, a nie z Firebase Authentication i Cloud Storage Security Rules.
Interfejsy API
Oprócz pakietów SDK dla Firebase dla Cloud Storage istnieje kilka innych sposobów uzyskiwania dostępu do danych przechowywanych w zasobniku Cloud Storage, w zależności od tego, co chcesz zrobić. Jeśli uzyskujesz dostęp do danych na serwerze, oferujemy biblioteki po stronie serwera, a także interfejs API typu REST w formacie JSON i zgodny z S3 w formacie XML. Jeśli musisz tworzyć skrypty zmian lub wykonywać inne zadania administracyjne, przyda Ci się narzędzie wiersza poleceń.
Google Cloud pakiety SDK serwera
Google Cloud oferuje wysokiej jakości pakiety SDK serwera dla wielu usług w chmurze, 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 dokumentacji dotyczącej platformy, do której linki podaliśmy powyżej.
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 bez biblioteki klienta, chcesz zrobić coś, czego biblioteki klienta nie obsługują, lub po prostu masz ulubionego klienta HTTP, którego wolisz używać, Google Cloud Storage oferuje interfejsy API zarówno dla formatu JSON, jak i XML.
Oprócz tych interfejsów API dostępu do danych przechowywanych w Cloud Storage możesz używać interfejsu Cloud Storage for Firebase APIdo zarządzania zasobnikami Cloud Storage na potrzeby projektów Firebase.
gsutil
gsutil to narzędzie wiersza
poleceń, które zapewnia bezpośredni dostęp do Cloud Storage. Za pomocą gsutil możesz wykonywać wiele zadań związanych z zarządzaniem zasobnikami i obiektami, w tym:
- przesyłanie, pobieranie i usuwanie obiektów;
- wyświetlanie listy zasobników i obiektów;
- przenoszenie, kopiowanie i zmienianie nazw obiektów;
- edycja list kontroli dostępu do obiektów i zasobników.
gsutil umożliwia też wykonywanie innych zaawansowanych operacji, takich jak przenoszenie plików z jednego katalogu do drugiego czy usuwanie wszystkich plików znajdujących się w określonej lokalizacji.
Przeniesienie wszystkich plików z jednego odniesienia do drugiego jest bardzo proste:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Podobnie intuicyjne jest zbiorcze usuwanie wszystkich plików znajdujących się w odniesieniu:
# 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
Częstotliwości żądań
Google Cloud Storage to wysoce skalowalna usługa, która wykorzystuje technologię automatycznego skalowania , aby osiągać bardzo wysokie częstotliwości żądań.
Google Cloud Storage to usługa wielodostępna, co oznacza, że użytkownicy korzystają z tego samego zestawu zasobów bazowych. Aby jak najlepiej wykorzystać te współdzielone zasoby, zasobniki mają początkową pojemność wejścia/wyjścia.
Planując integrację Cloud Storage for Firebase z aplikacją, zastanów się nad minimalną częstotliwością żądań, której aplikacja potrzebuje do prawidłowego działania, oraz nad efektywnym wysyłaniem żądań. Zapoznaj się z wytycznymi dotyczącymi częstotliwości żądań, a zwłaszcza z wytycznymi dotyczącymi zwiększania częstotliwości żądań.
Obsługa wersji obiektów
Czy zdarzyło Ci się kiedyś przypadkowo usunąć coś, czego nie można było przywrócić z kopii zapasowej?
Google Cloud Storage obsługuje
wersjonowanie obiektów,
które zapewnia automatyczny sposób tworzenia kopii zapasowych danych i przywracania ich z tych
kopii. Wersjonowanie obiektów możesz włączyć za pomocą polecenia gsutil versioning set:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage zawsze wybiera najnowszą wersję, więc jeśli chcesz przywrócić obiekt, musisz użyć jednego z powyższych interfejsów API lub narzędzi, aby ustawić żądany obiekt jako najnowszy.
Zarządzanie cyklem życia obiektu
Możliwość automatycznego archiwizowania lub usuwania nieaktualnych plików jest przydatną funkcją w wielu aplikacjach. Na szczęście Google Cloud Storage oferuje zarządzanie cyklem życia obiektów, które umożliwia usuwanie lub archiwizowanie obiektów po określonym czasie.
Załóżmy, że masz aplikację do udostępniania zdjęć i chcesz, aby wszystkie zdjęcia były usuwane w ciągu 1 dnia. Zasady cyklu życia obiektów możesz skonfigurować w ten sposób:
// 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. Jeśli więc 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 osobnych zasobników lub ręcznie usuwać pliki 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 mogą służyć do transkodowania filmów, klasyfikowania obrazów za pomocą uczenia maszynowego lub synchronizowania metadanych z Firebase Realtime Database. Cloud Functions, które wymagają jeszcze mniejszych nakładów niż App Engine, to najszybszy sposób reagowania na zmiany w Cloud Storage.
Google Cloud Vision API
Interfejs Google Cloud Vision API umożliwia programistom zrozumienie treści obrazu dzięki enkapsulacji zaawansowanych modeli uczenia maszynowego w prostym interfejsie API. Szybko klasyfikuje obrazy w tysiącach kategorii, wykrywa poszczególne obiekty i twarze na obrazach, znajduje i odczytuje drukowane słowa na obrazach, identyfikuje treści obraźliwe, a nawet analizuje nastawienie obrazu.
Google Cloud Speech API
Podobnie jak Vision API, the Google Cloud Speech API enables programistom wyodrębnianie tekstu z pliku audio przechowywanego w Cloud Storage. Interfejs API rozpoznaje ponad 80 języków i wariantów, co pozwala obsługiwać globalne grono użytkowników. W połączeniu z Google Cloud Natural Language API, programiści mogą zarówno wyodrębniać tekst, jak i wnioskować o jego znaczeniu. Jeśli potrzebujesz obsługi globalnego grona odbiorców, połącz to z Google Translate API, aby przetłumaczyć tekst na ponad 90 języków.
Google App Engine
Cloud Storage for Firebase używa 2 różnych formatów nazw domyślnych zasobników w zależności od tego, kiedy zasobnik został utworzony:
- Domyślny zasobnik utworzony po
wrześniu 2024 r. : domyślne zasobniki są niezależne od Google App Engine.*.firebasestorage.app - Starsze domyślne zasobniki:
domyślne zasobniki są współdzielone z Google App Engine.*.appspot.com
Google App Engine to platforma jako usługa, która automatycznie skaluje logikę backendu w odpowiedzi na ilość otrzymywanego ruchu. Wystarczy przesłać kod backendu, a Google zajmie się dostępnością aplikacji. Nie musisz konfigurować ani utrzymywać serwerów. App Engine to szybki i prosty sposób na dodanie do aplikacji Firebase dodatkowej mocy obliczeniowej lub zaufanego wykonania.
Starsza integracja z App Engine
Jeśli masz starszy *.appspot.com
Standardowe środowiska Java, Python i Go dla App Engine obejmują App Engine Images API (Java | Python | Go), które może zmieniać rozmiar, obracać, odwracać i przycinać obraz, a także zwracać adres URL do wyświetlania obrazu, co umożliwia przekształcenia po stronie klienta, podobnie jak w przypadku Cloudinary i Imgix.
Wskazówki dotyczące współdzielonego zasobnika
Jeśli używasz starszego *.appspot.com
Firebase Security Rules i pliki App Engine: Pliki przesłane za pomocą App Engine znajdują się w tym samym zasobniku i podlegają tym samym konfiguracjom bezpieczeństwa. Jeśli skonfigurujesz Firebase Security Rules pod kątem dostępu publicznego, nowo przesłane pliki App Engine również będą dostępne publicznie.
Ustawianie uprawnień: podczas importowania istniejącego Google Cloud projektu do Firebase może być konieczne ustawienie domyślnej kontroli dostępu do obiektów, aby umożliwić Firebase dostęp do nich. Uruchom to polecenie za pomocą
gsutil:gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Znane problemy z Cloud Storage i App Engine
Znane są 2 przypadki, w których nie można zaimportować aplikacji App Engine:
Projekt zawiera poprzednią App Engine Datastore Master/Slave aplikację.
Projekt ma identyfikator projektu z prefiksem domeny, np.
domain.com:project-1234.
W żadnym z tych przypadków projekt nie będzie obsługiwał Cloud Storage for Firebase, i aby korzystać z Cloud Storage, musisz utworzyć nowy projekt Firebase. Jeśli masz pytania, skontaktuj się z zespołem pomocy Firebase.