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

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

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

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

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

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

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

【问题讨论】:

    标签: javascript firebase firebase-storage firebase-console


    【解决方案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。

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

          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')
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2018-01-28
            • 1970-01-01
            • 2019-05-18
            • 2022-11-10
            • 2020-05-09
            • 2023-04-02
            • 2020-11-27
            • 1970-01-01
            • 2014-12-30
            相关资源
            最近更新 更多