Как создать папку в Firebase Storage?
Таким образом, новый Firebase поддерживает хранилище с помощью Google Cloud Platform.
Вы можете загрузить файл на images
папка с использованием:
var uploadTask = storageRef.child('images').put(file, metadata);
Что делать, если вы хотите создать подпапку images/user1234
динамически используя код?
Официальный образец не показывает, как это сделать, ни в официальном руководстве, ни в справочных документах.
Является ли консоль Firebase единственным местом, где можно создавать папки вручную?
6 ответов
Консоль Firebase позволяет вам создавать папки, так как это самый простой способ добавить файлы в определенную папку.
Но нет публичного API для создания папки. Вместо этого папки создаются автоматически при добавлении в них файлов.
Firebase Storage API динамически создает "папки" в качестве промежуточных продуктов: если вы создаете файл в images/user1234/file.txt
все промежуточные "папки", такие как "images" и "user1234", будут созданы по пути. Итак, ваш код становится:
var uploadTask = storageRef.child('images/user1234/file.txt').put(file, metadata);
Обратите внимание, что вам нужно включить имя файла (foo.txt
например) в child()
вызов, так как ссылка должна включать полный путь, а также имя файла, в противном случае ваш файл будет называться images
,
В Firebase отсутствуют очень важные функции, всегда нужно делать какие-то трюки, чтобы эмулировать поведение, которое должно быть стандартным.
Если вы создадите папку вручную из консоли Firebase , она сохранится , даже если в ней больше нет файлов.
Если вы создадите папку динамически и все файлы в какой-то момент будут удалены, папка исчезнет и также будет удалена.
Я реализовал файловый менеджер с использованием Firebase Storage, поэтому, когда пользователь хочет загрузить файл, он может сделать это через этот интерфейс, а не из чего-то внешнего по отношению к приложению, как в Firebase Console. Вы хотите дать пользователю возможность реорганизовать файлы по своему усмотрению, но такая обычная вещь, как создание новой папки, не может быть выполнена без уловок, почему? только потому, что это Firebase.
Итак, чтобы эмулировать это поведение, я придумал следующее:
- Создайте ссылку с новым именем папки.
- Создайте ссылку на «призрачный» файл как дочерний элемент ссылки на папку и всегда давайте ему одно и то же фиксированное имя, например. '.ghostfile'
- Загрузите файл в эту только что созданную папку. Любой метод действителен, я просто использую uploadString.
- Каждый раз, когда я перечисляю файлы ссылки, исключаю любой файл, названный как раньше. Так что этот "призрачный" файл не отображается в файловом менеджере.
Итак, пример создания папки:
async function createFolder (currentRef: StorageReference, folderName: string) {
const newDir = ref(currentRef, name)
const ghostFile = ref(newDir, '.ghostfile')
await uploadString(ghostFile, '')
}
И пример списка файлов:
async function loadLists (ref: StorageReference) {
const { prefixes, items } = await listAll(ref)
return {
directories: prefixes,
files: items.filter(file => file.name !=== '.ghostfile')
}
}
Вы наверняка можете создавать каталоги... немного поиграв со ссылками, я сделал следующее.
test = (e,v) => {
let fileName = "filename"
let newDirectory = "someDir"
let storage = firebase.storage().ref(`images/${newDirectory}/${fileName}`)
let file = e.target.files[0]
if(file !== undefined && file.type === "image/png" ) {
storage.put(file)
.then( d => console.log('you did it'))
.catch( d => console.log("do something"))
}
}
String myFolder = "MyImages";
StorageReference riversRef = storageReference.child(myFolder).child("images/pic.jpg");
Консоль Firebase позволяет создавать папки. Я не думаю, что есть другой способ создать папку.