如何在Firebase存储中创建文件夹?

Pie*_*ier 15 javascript firebase firebase-storage firebase-console

因此,新的Firebase支持使用Google Cloud Platform进行存储.

您可以images使用以下命令将文件上传到文件夹:

var uploadTask = storageRef.child('images').put(file, metadata);
Run Code Online (Sandbox Code Playgroud)

如果要images/user1234使用代码动态创建子文件夹,该怎么办?

官方样本没有显示如何执行此操作,也没有显示官方指南参考文档.

Firebase控制台是唯一可以手动创建文件夹的位置吗?

Mik*_*ald 22

Firebase存储API动态创建"文件夹"作为中间产品:如果您创建文件images/user1234/file.txt,将在此过程中创建所有中间"文件夹",如"images"和"user1234".所以你的代码变成:

var uploadTask = storageRef.child('images/user1234/file.txt').put(file, metadata);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要foo.txtchild()调用中包含文件名(例如),因为引用应包括完整路径以及文件名,否则将调用您的文件images.


Fra*_*len 12

Firebase控制台允许您创建文件夹,因为这是将文件添加到特定文件夹的最简单方法.

但是没有用于创建文件夹的公共API.而是在向其添加文件时自动创建文件夹.


gio*_*ine 7

Firebase 缺乏非常重要的功能,总是需要做一些技巧来模拟应该是标准的行为。

  • 如果您从 Firebase 控制台手动创建文件夹,即使其中没​​有更多文件,该文件夹也会 保留下来。

  • 如果动态创建文件夹并且所有文件在某个时候被删除,则该文件夹将会消失并被删除。

我使用 Firebase Storage 实现了一个文件管理器,因此当用户想要上传文件时,他可以通过此界面来上传文件,而不是像 Firebase 控制台那样从应用程序外部的东西上传。您想让用户可以根据需要重新组织文件,但是像创建新文件夹这样常见的事情如果没有技巧就无法完成,为什么呢?只是因为这是 Firebase。

因此,为了模仿这种行为,我想出了以下内容:

  1. 使用新文件夹名称创建引用。
  2. 为“幽灵”文件创建一个引用作为文件夹引用的子级,并始终为其指定相同的固定名称,例如。'.ghostfile'
  3. 将文件上传到这个新创建的文件夹。任何方法都有效,我只是使用uploadString
  4. 每次我列出参考文件时,都会排除以前命名的任何文件。所以这个“幽灵”文件不会显示在文件管理器中。

创建一个文件夹的示例:

async function createFolder (currentRef: StorageReference, folderName: string) {
        const newDir = ref(currentRef, name)
        const ghostFile = ref(newDir, '.ghostfile')
        await uploadString(ghostFile, '')
}
Run Code Online (Sandbox Code Playgroud)

以及列出文件的示例:

async function loadLists (ref: StorageReference) {
    const { prefixes, items } = await listAll(ref)
    return {
        directories: prefixes,
        files: items.filter(file => file.name !=== '.ghostfile')
    }
}
Run Code Online (Sandbox Code Playgroud)


Jus*_*ave 5

您肯定可以创建目录......稍微使用参考我做了以下。

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"))
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 你知道弗兰克、迈克和我的答案真的是一样的,只是说的方式不同...... (2认同)