如何使用递归获取 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
}