Ваши файлы хранятся в сегменте Cloud Storage. Файлы в этом сегменте представлены в виде иерархической структуры, как и в файловой системе на локальном жестком диске или в Firebase Realtime Database. Создав ссылку на файл, приложение получает к нему доступ. Эти ссылки можно использовать для загрузки или скачивания данных, получения или обновления метаданных или удаления файла. Ссылка может указывать на определенный файл или на узел более высокого уровня в иерархии.
Если вы использовали Firebase Realtime Database, эти пути должны быть вам хорошо знакомы. Однако данные файлов хранятся в Cloud Storage, а не в Realtime Database.
Создание ссылки
Чтобы загружать, скачивать или удалять файлы, а также получать или обновлять метаданные, необходимо создать ссылку на файл, с которым вы хотите работать. Ссылку можно рассматривать как указатель на файл в облаке. Ссылки не занимают много места, поэтому вы можете создавать их в любом количестве и использовать повторно для нескольких операций.
Чтобы создать ссылку, получите экземпляр сервиса Storage с помощью getStorage(), а затем вызовите ref() с сервисом в качестве аргумента.
Эта ссылка указывает на корень корзины 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();
Вы можете создать ссылку на местоположение ниже в дереве, например 'images/space.jpg', передав этот путь в качестве второго аргумента при вызове 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"
Как использовать ссылки для навигации
Вы также можете использовать свойства parent и root для перехода вверх по иерархии файлов. parent – переход на один уровень вверх, а root – на самый верхний уровень.
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
Методы child(), parent и root можно объединять в цепочки, поскольку каждый из них возвращает ссылку. Исключение – parent root, которое равно 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;
Свойства цифрового отпечатка
Вы можете проверить ссылки, чтобы лучше понять, на какие файлы они указывают, используя свойства fullPath, name и bucket. Эти свойства
получают полный путь к файлу, имя файла
и сегмент, в котором хранится файл.
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;
Ограничения на использование цифровых отпечатков
Пути и названия могут состоять из любых символов Unicode, но с некоторыми ограничениями:
- Общая длина
reference.fullPathдолжна быть от 1 до 1024 байт в кодировке UTF-8. - В названиях файлов запрещены управляющие символы ASCII (символ возврата каретки и перевод строки).
- Не используйте символы
#,[,],*и?, так как они не поддерживаются в некоторых инструментах, например Firebase Realtime Database и gsutil.
Полный пример
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;
Далее мы узнаем, как загружать файлы в Cloud Storage.