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
Aby przesyłać lub pobierać pliki, usuwać pliki lub pobierać i aktualizować metadane, musisz utworzyć odwołanie do pliku, z którym chcesz pracować. 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 w różnych operacjach.
Aby utworzyć odwołanie, pobierz instancję usługi Storage za pomocą funkcji getStorage()
, a następnie wywołaj funkcję ref()
, podając jako argument usługę.
Ten element wskazuje na katalog główny zasobnika Cloud Storage.
Web
import { getStorage, ref } from "firebase/storage"; // Get a reference to the storage service, which is used to create references in your storage bucket const storage = getStorage(); // Create a storage reference from our storage service const storageRef = ref(storage);
Web
// Get a reference to the storage service, which is used to create references in your storage bucket var storage = firebase.storage(); // Create a storage reference from our storage service var storageRef = storage.ref();
Możesz utworzyć odwołanie do lokalizacji niżej w drzewie,
np. 'images/space.jpg'
, przekazując tę ścieżkę jako drugi argument podczas wywołania funkcji ref()
.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Create a child reference const imagesRef = ref(storage, 'images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' const spaceRef = ref(storage, 'images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
Web
// Create a child reference var imagesRef = storageRef.child('images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' var spaceRef = storageRef.child('images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
Poruszanie się po dokumencie za pomocą odwołań
Do poruszania się w hierarchii plików w górę możesz też używać właściwości parent
i root
. parent
przenosi Cię o jeden poziom wyżej, a root
przenosi Cię aż na samą górę.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // Parent allows us to move to the parent of a reference const imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket const rootRef = spaceRef.root; // rootRef now points to the root
Web
// Parent allows us to move to the parent of a reference var imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket var rootRef = spaceRef.root; // rootRef now points to the root
Funkcje child()
, parent
i root
można łączyć ze sobą wielokrotnie, ponieważ każda z nich zwraca odwołanie. Wyjątkiem jest parent
w komponencie root
, który jest null
.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // References can be chained together multiple times const earthRef = ref(spaceRef.parent, 'earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null const nullRef = spaceRef.root.parent;
Web
// References can be chained together multiple times var earthRef = spaceRef.parent.child('earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null var nullRef = spaceRef.root.parent;
Właściwości referencyjne
Aby lepiej poznać pliki, do których odwołują się odwołania, możesz je sprawdzić, korzystając z właściwości fullPath
, name
i bucket
. Te właściwości umożliwiają uzyskanie pełnej ścieżki do pliku, jego nazwy oraz zasobnika, w którym jest on przechowywany.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // Reference's path is: 'images/space.jpg' // This is analogous to a file path on disk spaceRef.fullPath; // Reference's name is the last segment of the full path: 'space.jpg' // This is analogous to the file name spaceRef.name; // Reference's bucket is the name of the storage bucket where files are stored spaceRef.bucket;
Web
// Reference's path is: 'images/space.jpg' // This is analogous to a file path on disk spaceRef.fullPath; // Reference's name is the last segment of the full path: 'space.jpg' // This is analogous to the file name spaceRef.name; // Reference's bucket is the name of the storage bucket where files are stored spaceRef.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:
- Całkowity rozmiar pola
reference.fullPath
musi mieścić się w zakresie od 1 do 1024 bajtów w przypadku kodowania UTF-8. - Nie używaj znaków przejścia do nowej linii ani znaków sterujących.
- Unikaj korzystania z funkcji
#
,[
,]
,*
i?
, ponieważ nie działają one dobrze z innymi narzędziami, takimi jak Firebase Realtime Database czy gsutil.
Pełny przykład
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Points to the root reference const storageRef = ref(storage); // Points to 'images' const imagesRef = ref(storageRef, 'images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values const fileName = 'space.jpg'; const spaceRef = ref(imagesRef, fileName); // File path is 'images/space.jpg' const path = spaceRef.fullPath; // File name is 'space.jpg' const name = spaceRef.name; // Points to 'images' const imagesRefAgain = spaceRef.parent;
Web
// Points to the root reference var storageRef = firebase.storage().ref(); // Points to 'images' var imagesRef = storageRef.child('images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values var fileName = 'space.jpg'; var spaceRef = imagesRef.child(fileName); // File path is 'images/space.jpg' var path = spaceRef.fullPath; // File name is 'space.jpg' var name = spaceRef.name; // Points to 'images' var imagesRef = spaceRef.parent;
Czas nauczyć się, jak przesyłać pliki do Cloud Storage.