如何在 Firebase 存储中创建文件夹?
How to create a folder in Firebase Storage?
所以新的 Firebase 支持使用 Google 云平台进行存储。
您可以使用以下方法将文件上传到 images
文件夹:
var uploadTask = storageRef.child('images').put(file, metadata);
如果要使用代码动态创建子文件夹images/user1234
怎么办?
官方 sample does not show how to do that, nor the official guide or reference docs.
Firebase 控制台是唯一可以创建文件夹的地方吗manually?
Firebase 控制台允许您创建文件夹,因为这是将文件添加到特定文件夹的最简单方法。
但是没有publicAPI创建文件夹。相反,文件夹是在您向其中添加文件时自动创建的。
Firebase 存储 API 动态创建 "folders" 作为中间产品:如果您在 images/user1234/file.txt
创建文件,所有中间 "folders" 像 "images" 和"user1234" 将在此过程中创建。所以你的代码变成:
var uploadTask = storageRef.child('images/user1234/file.txt').put(file, metadata);
请注意,您需要在 child()
调用中包含文件名(例如 foo.txt
),因为引用应包含完整路径和文件名,否则您的文件将被称为 images
.
Firebase 控制台允许您创建文件夹。我认为没有其他方法可以创建文件夹。
您当然可以创建目录...稍微使用一下参考资料,我做了以下操作。
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"))
}
}
String myFolder = "MyImages";
StorageReference riversRef = storageReference.child(myFolder).child("images/pic.jpg");
Firebase 缺少非常重要的功能,总是需要做一些技巧来模拟应该是标准的行为。
如果您从 Firebase 控制台手动创建文件夹,它将
坚持,即使其中没有更多文件。
如果您动态创建一个文件夹,并且所有文件在某些时候都会被删除
点,该文件夹将消失并被删除。
我使用 Firebase Storage 实现了一个文件管理器,因此当用户想要上传文件时,他可以通过此界面上传文件,而不是像 Firebase 控制台那样从应用程序外部的东西上传文件。您想让用户可以根据自己的需要重新组织文件,但是像创建新文件夹这样常见的事情却需要一些技巧才能完成,为什么?仅仅因为这是 Firebase。
因此,为了模拟这种行为,我想到了以下内容:
- 使用新文件夹名称创建引用。
- 为“幽灵”文件创建一个引用作为文件夹引用的子文件,并始终为其指定相同的固定名称,例如。 '.ghostfile'
- 将文件上传到这个新创建的文件夹。任何方法都有效,我就用uploadString.
- 每次我列出引用的文件时,排除任何命名为以前的文件。所以这个“幽灵”文件没有显示在文件管理器中。
创建 foler 的示例:
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 支持使用 Google 云平台进行存储。
您可以使用以下方法将文件上传到 images
文件夹:
var uploadTask = storageRef.child('images').put(file, metadata);
如果要使用代码动态创建子文件夹images/user1234
怎么办?
官方 sample does not show how to do that, nor the official guide or reference docs.
Firebase 控制台是唯一可以创建文件夹的地方吗manually?
Firebase 控制台允许您创建文件夹,因为这是将文件添加到特定文件夹的最简单方法。
但是没有publicAPI创建文件夹。相反,文件夹是在您向其中添加文件时自动创建的。
Firebase 存储 API 动态创建 "folders" 作为中间产品:如果您在 images/user1234/file.txt
创建文件,所有中间 "folders" 像 "images" 和"user1234" 将在此过程中创建。所以你的代码变成:
var uploadTask = storageRef.child('images/user1234/file.txt').put(file, metadata);
请注意,您需要在 child()
调用中包含文件名(例如 foo.txt
),因为引用应包含完整路径和文件名,否则您的文件将被称为 images
.
Firebase 控制台允许您创建文件夹。我认为没有其他方法可以创建文件夹。
您当然可以创建目录...稍微使用一下参考资料,我做了以下操作。
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"))
}
}
String myFolder = "MyImages";
StorageReference riversRef = storageReference.child(myFolder).child("images/pic.jpg");
Firebase 缺少非常重要的功能,总是需要做一些技巧来模拟应该是标准的行为。
如果您从 Firebase 控制台手动创建文件夹,它将 坚持,即使其中没有更多文件。
如果您动态创建一个文件夹,并且所有文件在某些时候都会被删除 点,该文件夹将消失并被删除。
我使用 Firebase Storage 实现了一个文件管理器,因此当用户想要上传文件时,他可以通过此界面上传文件,而不是像 Firebase 控制台那样从应用程序外部的东西上传文件。您想让用户可以根据自己的需要重新组织文件,但是像创建新文件夹这样常见的事情却需要一些技巧才能完成,为什么?仅仅因为这是 Firebase。
因此,为了模拟这种行为,我想到了以下内容:
- 使用新文件夹名称创建引用。
- 为“幽灵”文件创建一个引用作为文件夹引用的子文件,并始终为其指定相同的固定名称,例如。 '.ghostfile'
- 将文件上传到这个新创建的文件夹。任何方法都有效,我就用uploadString.
- 每次我列出引用的文件时,排除任何命名为以前的文件。所以这个“幽灵”文件没有显示在文件管理器中。
创建 foler 的示例:
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')
}
}