Utwórz referencję Cloud Storage w Cloud Storage dla C++

Pliki są przechowywane w zasobniku Cloud Storage. Pliki w tym zasobniku są prezentowane w strukturze hierarchicznej, podobnie jak system plików na lokalnym dysku twardym lub dane w Firebase Realtime Database. Gdy aplikacja utworzy odwołanie do pliku, uzyska do niego dostęp. Te odwołania można następnie wykorzystać do przesyłania i pobierania danych, pobierania i aktualizowania metadanych oraz usuwania pliku. Odwołanie może wskazywać na konkretny plik lub węzeł wyższego poziomu w hierarchii.

Jeśli korzystasz z wersji Firebase Realtime Database, te ścieżki powinny być Ci bardzo znajome. Dane plików są jednak przechowywane w Cloud Storage, a nie w Realtime Database.

Tworzenie referencji

Utwórz odwołanie, aby przesłać, pobrać lub usunąć plik albo pobrać lub zaktualizować jego metadane. Referencję można traktować jako wskaźnik do pliku w chmurze. Odwołania są lekkie, więc możesz utworzyć ich tyle, ile potrzebujesz. Można ich też używać wielokrotnie do różnych operacji.

Odwołania są tworzone z usługi storage w aplikacji Firebase przez wywołanie metody GetReferenceFromUrl() i przekazanie adresu URL w formie gs://<your-cloud-storage-bucket>. Adres URL znajdziesz w sekcji Pamięć w Firebase konsoli.

// Get a reference to the storage service, using the default Firebase App
Storage* storage = Storage::GetInstance(app);

// Create a Cloud Storage reference from our storage service
StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-cloud-storage-bucket>");

Możesz utworzyć odwołanie do lokalizacji niżej w drzewie, na przykład 'images/space.jpg', używając metody child w przypadku istniejącego odwołania.

// Create a child reference
// images_ref now points to "images"
StorageReference images_ref = storage_ref.Child("images");

// Child references can also take paths delimited by '/'
// space_ref now points to "images/space.jpg"
// images_ref still points to "images"
StorageReference space_ref = storage_ref.Child("images/space.jpg");

// This is equivalent to creating the full reference
StorageReference space_ref = storage.GetReferenceFromUrl("gs://<your-cloud-storage-bucket>/images/space.jpg");

Możesz też użyć metod Parent i Root, aby przejść wyżej w hierarchii plików. Parent przenosi o jeden poziom wyżej, a Root przenosi do góry.

// Parent allows us to move to the parent of a reference
// images_ref now points to 'images'
StorageReference images_ref = space_ref.Parent();

// Root allows us to move all the way back to the top of our bucket
// root_ref now points to the root
StorageReference root_ref = space_ref.Root();

Funkcje Child, ParentRoot można łączyć ze sobą wielokrotnie, ponieważ każda z nich zwraca odwołanie. Wyjątkiem jest ParentRoot, które jest nieprawidłowym StorageReference.

// References can be chained together multiple times
// earth_ref points to "images/earth.jpg"
StorageReference earth_ref = space_ref.Parent().Child("earth.jpg");

// null_ref is null, since the parent of root is an invalid StorageReference
StorageReference null_ref = space_ref.Root().Parent();

Metody referencyjne

Aby lepiej poznać pliki, do których odwołują się odwołania, możesz je sprawdzić, korzystając z metod full_path, namebucket. Te metody zwracają pełną ścieżkę, nazwę i zasośnik pliku.

// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
space_ref.full_path();

// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
space_ref.name();

// Reference's bucket is the name of the Cloud Storage bucket where files are stored
space_ref.bucket();

Ograniczenia dotyczące źródeł

Ścieżki referencyjne i nazwy mogą zawierać dowolną sekwencję prawidłowych znaków Unicode, ale obowiązują pewne ograniczenia, w tym:

  1. Łączna długość odwołania.fullPath musi zawierać się w zakresie od 1 do 1024 bajtów w przypadku kodowania UTF-8.
  2. Nie używaj znaków przejścia do nowej linii ani znaków sterujących.
  3. Unikaj korzystania z funkcji #, [, ], *?, ponieważ nie działają one dobrze z innymi narzędziami, takimi jak Firebase Realtime Database czy gsutil.

Pełny przykład

Storage* storage = Storage::GetInstance(app);

// Points to the root reference
StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-bucket-name>");

// Points to "images"
StorageReference images_ref = storage_ref.Child("images");

// Points to "images/space.jpg"
// Note that you can use variables to create child values
std::string filename = "space.jpg";
StorageReference space_ref = images_ref.Child(filename);

// File path is "images/space.jpg"
std::string path = space_ref.full_path()

// File name is "space.jpg"
std::string name = space_ref.name()

// Points to "images"
StorageReference images_ref = space_ref.Parent();

Następne kroki

Czas nauczyć się, jak przesyłać pliki do Cloud Storage.