Projekt w 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 w 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 API, aby uzyskiwać dostęp do plików przesłanych za pomocą pakietów SDK dla, zwłaszcza do wykonywania bardziej złożonych operacji, takich jak kopiowanie lub przenoszenie pliku albo wyświetlanie listy wszystkich plików dostępnych w odniesieniu.Google Cloud StorageFirebaseCloud Storage
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 Firebase dla Cloud Storage istnieje wiele 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 JSON i zgodny z S3 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 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 dla Firebase APIdo zarządzania zasobnikami Cloud Storage na potrzeby projektów 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 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ę autoskalowania, 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ą wniosków, której aplikacja potrzebuje do prawidłowego działania, oraz nad efektywnym wysyłaniem wniosków. 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
obsługę wersji obiektów,
która zapewnia automatyczne tworzenie kopii zapasowych danych i przywracanie ich z tych
kopii. Możesz włączyć wersjonowanie obiektów 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 łatwym w użyciu interfejsie API. Szybko klasyfikuje obrazy w tysiącach kategorii, wykrywa poszczególne obiekty i twarze na obrazach, znajduje i odczytuje drukowane słowa zawarte 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, aby 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 dotrzeć do odbiorców na całym świecie, 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.
Integracja ze starszą wersją 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 są przechowywane 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 będą również 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
Istnieją 2 znane 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 w Firebase. Jeśli masz pytania, skontaktuj się z zespołem pomocy Firebase.