You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取Firebase Storage中的所有图片?

获取Firebase Storage文件夹下所有图片下载链接的高效方案

方案1:用Firebase Cloud Firestore同步文件元数据

这是最适合客户端的智能方案,彻底避免猜文件名的麻烦:

  • 上传图片到Storage时,同时把文件的存储路径、下载链接(或生成链接的必要信息)写入Firebase Cloud Firestore的对应文档,比如在reports/{public_id}/images集合里,每条文档存一张图片的信息。
  • 客户端直接读取这个集合的所有文档,就能拿到所有图片的下载链接,或者根据存储路径实时生成链接。

示例代码(C#):

// 读取Firestore中对应public_id的所有图片记录
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
var collectionRef = db.Collection("reports").Document(public_id).Collection("images");
var querySnapshot = await collectionRef.GetSnapshotAsync();

List<string> downloadLinks = new List<string>();
foreach (var doc in querySnapshot.Documents)
{
    string storagePath = doc.GetValue<string>("storagePath");
    // 根据路径生成下载链接
    var storageRef = new FirebaseStorage("*****.appspot.com").Child(storagePath);
    string link = await storageRef.GetDownloadUrlAsync();
    downloadLinks.Add(link);
}

// 批量处理所有链接
foreach (var link in downloadLinks)
{
    MessageBox.Show(link);
}

方案2:借助Google Cloud Storage List API(服务端/Admin SDK)

如果是在后台服务端运行程序,可以用Firebase Admin SDK调用GCS的List API直接列出文件夹下所有文件:

// 初始化Admin SDK(需配置服务账号密钥)
var app = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("service-account-key.json"),
});

var storage = StorageClient.Create();
var bucketName = "*****.appspot.com";
var prefix = $"reports/{public_id}/";

// 列出指定前缀下的所有文件
var files = storage.ListObjects(bucketName, prefix, new ListObjectsOptions { Delimiter = "/" });

List<string> downloadLinks = new List<string>();
foreach (var obj in files)
{
    // 过滤掉文件夹本身的记录
    if (!obj.Name.EndsWith("/"))
    {
        var storageRef = new FirebaseStorage(bucketName).Child(obj.Name);
        string link = await storageRef.GetDownloadUrlAsync();
        downloadLinks.Add(link);
    }
}

方案3:客户端直接列出文件(应急用)

如果你的Firebase Storage客户端库支持ListAllAsync方法(需确认版本),可以直接在客户端列出文件夹内容,但要注意配置Storage安全规则允许读取文件列表:

FirebaseStorage storage = new FirebaseStorage("*****.appspot.com");
var folderRef = storage.Child("reports").Child(public_id);
// 需配置Storage规则,比如:match /reports/{public_id}/{allPaths=**} { allow read: if request.auth != null; }
var listResult = await folderRef.ListAllAsync();

List<string> downloadLinks = new List<string>();
foreach (var item in listResult.Items)
{
    string link = await item.GetDownloadUrlAsync();
    downloadLinks.Add(link);
}

内容的提问来源于stack exchange,提问作者Crittts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:30:47