28

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

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

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

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

官方样本没有显示如何做到这一点,官方指南参考文档也没有。

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

4

6 回答 6

46

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

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

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

于 2016-06-06T21:04:27.867 回答
26

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

但是没有公共 API 来创建文件夹。相反,文件夹是在您向其中添加文件时自动创建的。

于 2016-06-06T18:40:17.573 回答
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"))
    }
}

在此处输入图像描述

于 2017-10-10T21:33:00.907 回答
4
String myFolder = "MyImages";
StorageReference riversRef = storageReference.child(myFolder).child("images/pic.jpg");
于 2018-04-18T06:35:51.437 回答
2

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

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

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

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

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

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

所以一个创建文件夹的例子:

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')
    }
}
于 2021-12-15T11:19:34.907 回答
0

Firebase 控制台允许您创建文件夹。我认为没有另一种创建文件夹的方法。

于 2017-08-08T22:09:13.137 回答