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

Posted

技术标签:

【中文标题】如何在 Firebase 存储中创建文件夹?【英文标题】:How to create a folder in Firebase Storage? 【发布时间】:2016-10-06 11:19:31 【问题描述】:

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

您可以使用以下方法将文件上传到images 文件夹:

var uploadTask = storageRef.child('images').put(file, metadata);

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

官方的sample 没有说明如何做到这一点,official guide 或 reference docs 也没有。

Firebase 控制台是唯一可以创建文件夹的地方吗manually?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

Firebase Storage API 动态创建“文件夹”作为中间产品:如果您在 images/user1234/file.txt 创建文件,则将一路创建所有中间“文件夹”,如“images”和“user1234”。所以你的代码变成了:

var uploadTask = storageRef.child('images/user1234/file.txt').put(file, metadata);

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

【讨论】:

我们可以在存储控制台上传文件夹吗? 这给了我“_filePath.includes 不是一个函数”......知道为什么会这样吗?我传递给 .child() 的路径看起来是正确的(确保将其打印到控制台)。【参考方案3】:

Firebase 控制台允许您创建文件夹。我认为没有其他方法可以创建文件夹。

【讨论】:

【参考方案4】:

您当然可以创建目录...只需使用我执行以下操作的引用。

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"))
    

【讨论】:

你知道弗兰克、迈克和我之间的答案其实是一样的,只是说的方式不同...... 您的答案不使用 .child() 并将文件夹路径放在 ref() 而不是子目录中。在 AngularFire 中,它实际上按我预期的方式工作。在 Mike 的示例中,我遇到了错误的父文件夹问题。也许是 AngularFire 语法的一个怪癖。选择总是好的。【参考方案5】:
String myFolder = "MyImages";
StorageReference riversRef = storageReference.child(myFolder).child("images/pic.jpg");

【讨论】:

【参考方案6】:

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

如果您从 Firebase 控制台手动创建文件夹,它将 坚持,即使其中没​​有更多文件。

如果您动态地创建一个文件夹,并且所有文件都会在某些时候被删除 点,该文件夹将消失并被删除。

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

所以为了模仿这种行为,我想出了以下方法:

    使用新文件夹名称创建引用。 为“ghost”文件创建一个引用作为文件夹引用的子文件夹,并始终为其赋予相同的固定名称,例如。 '.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')
    

【讨论】:

以上是关于如何在 Firebase 存储中创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jackcess 在 Java 中创建一个新的 MS Access 文件

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

在 Maya 中创建文本生成工具的问题

如何在 firebase 数据库的文件夹中创建文件夹?

如何在 Firebase 中创建不同的用户组?

在 GCP Console 中创建存储分区后无法访问 Firebase 存储