如何在 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 文件