如何使用递归获取 Firebase 云存储目录树中的所有文件
How to Use Recursion to get all Files in a Directory Tree for Firebase Cloud Storage
我最近在 Swift 中一直在使用 Firebase 云存储,我遇到了一个场景,我想在“文件夹”(即有其他子文件夹)存储在存储桶中。换句话说,我想使用递归访问嵌套在许多文件夹中的文件。
我看过 之类的例子,当然,这是使用 Swift 的 FileManager
,所以我无法利用Firebase 云存储上的相同功能。
此外,请记住,我不想使用硬编码的参考路径,例如 storage.reference().child("Hard-coded path")
这是我目前没有使用递归的结果:
class FIRQueries {
var storage: Storage
var storageRef: StorageReference
init() {
storage = Storage.storage()
storageRef = storage.reference()
}
func listFilesInCloud(completion: @escaping(Result<StorageListResult, Error>) -> ()) {
self.storageRef.root().listAll { result, error in
if let error = error {
completion(.failure(error))
print(error.localizedDescription)
return
} else {
completion(.success(result))
for prefix in result.prefixes {
completion(.success(prefix.fullPath))
}
for item in result.items {
print(item)
}
}
}
}
并在 SwiftUI .onAppear
块中接收结果
.onAppear {
FIRQueries().listFilesInCloud { value in
switch value {
case .failure(let error):
print(error)
case .success(let result):
for prefix in result.prefixes {
print(prefix.fullPath)
}
}
}
}
太...有什么办法可以做到这一点?使用此代码,我只设法获取存储桶根目录下的“文件夹”的名称。我知道我可以在 self.storageRef.root()
之后设置一个 child
并给它一个路径,但它会是一个硬编码的路径。
感谢任何帮助!谢谢!
正如 listing all files 上的 Firebase 文档所示,您可以对每个前缀递归调用 listAll(completion:)
。
所以:
for prefix in result.prefixes {
print(prefix.fullPath)
prefix.listAll(...) // List files in subdirectory
}
我最近在 Swift 中一直在使用 Firebase 云存储,我遇到了一个场景,我想在“文件夹”(即有其他子文件夹)存储在存储桶中。换句话说,我想使用递归访问嵌套在许多文件夹中的文件。
我看过 FileManager
,所以我无法利用Firebase 云存储上的相同功能。
此外,请记住,我不想使用硬编码的参考路径,例如 storage.reference().child("Hard-coded path")
这是我目前没有使用递归的结果:
class FIRQueries {
var storage: Storage
var storageRef: StorageReference
init() {
storage = Storage.storage()
storageRef = storage.reference()
}
func listFilesInCloud(completion: @escaping(Result<StorageListResult, Error>) -> ()) {
self.storageRef.root().listAll { result, error in
if let error = error {
completion(.failure(error))
print(error.localizedDescription)
return
} else {
completion(.success(result))
for prefix in result.prefixes {
completion(.success(prefix.fullPath))
}
for item in result.items {
print(item)
}
}
}
}
并在 SwiftUI .onAppear
块中接收结果
.onAppear {
FIRQueries().listFilesInCloud { value in
switch value {
case .failure(let error):
print(error)
case .success(let result):
for prefix in result.prefixes {
print(prefix.fullPath)
}
}
}
}
太...有什么办法可以做到这一点?使用此代码,我只设法获取存储桶根目录下的“文件夹”的名称。我知道我可以在 self.storageRef.root()
之后设置一个 child
并给它一个路径,但它会是一个硬编码的路径。
感谢任何帮助!谢谢!
正如 listing all files 上的 Firebase 文档所示,您可以对每个前缀递归调用 listAll(completion:)
。
所以:
for prefix in result.prefixes {
print(prefix.fullPath)
prefix.listAll(...) // List files in subdirectory
}