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

如何通过Box API及.NET Core SDK高效获取父文件夹子目录文件的Box ID?

使用.NET Core SDK高效遍历Box父文件夹下所有子文件ID的方法

核心思路

高效的关键在于减少API调用次数:利用Box API的最大分页(1000条/页)批量获取内容,通过递归遍历子文件夹,同时只请求必要字段(id和type)降低数据传输量,避免不必要的资源消耗。

步骤实现

1. 初始化Box客户端

首先安装Box .NET SDK NuGet包:Install-Package Box.V2

使用服务账户JWT认证(适合后端服务场景)初始化客户端:

using Box.V2;
using Box.V2.Config;
using Box.V2.JWTAuth;

var boxConfig = new BoxConfigBuilder("<CLIENT_ID>", "<CLIENT_SECRET>", "<ENTERPRISE_ID>")
    .SetAuthRepositoryUri("https://api.box.com/oauth2/token")
    .Build();

var boxJwt = new BoxJWTAuth(boxConfig);
var adminToken = boxJwt.AdminToken();
var boxClient = boxJwt.AdminClient(adminToken);

2. 递归遍历+批量获取的核心方法

实现递归方法遍历指定文件夹下的所有文件,收集ID:

using Box.V2.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

public static async Task<List<string>> GetAllFileIdsInFolderAsync(BoxClient client, string folderId)
{
    var fileIds = new List<string>();
    string nextMarker = null;

    do
    {
        // 仅请求所需字段,缩减响应体积
        var items = await client.FoldersManager.GetFolderItemsAsync(
            folderId,
            limit: 1000, // 用最大分页减少API调用次数
            marker: nextMarker,
            fields: new List<string> { "id", "type" }
        );

        foreach (var item in items.Entries)
        {
            if (item.Type == "file")
            {
                fileIds.Add(item.Id);
            }
            else if (item.Type == "folder")
            {
                // 递归处理子文件夹
                var subFolderFileIds = await GetAllFileIdsInFolderAsync(client, item.Id);
                fileIds.AddRange(subFolderFileIds);
            }
        }

        nextMarker = items.NextMarker;
    } while (!string.IsNullOrEmpty(nextMarker));

    return fileIds;
}

3. 调用方法并处理结果

// 替换为目标父文件夹ID(根文件夹ID为"0")
var parentFolderId = "0";
var allFileIds = await GetAllFileIdsInFolderAsync(boxClient, parentFolderId);

// 示例:输出所有文件ID
foreach (var id in allFileIds)
{
    Console.WriteLine($"文件ID: {id}");
}

优化建议

  • 速率限制处理:Box API默认限制1000次/分钟,若文件/文件夹数量极大,可借助SDK内置的重试机制,或添加适度请求延迟避免限流。
  • 谨慎并行:针对大量子文件夹,可尝试Parallel.ForEachAsync并行处理,但需控制并发数(建议≤5),防止触发平台限流。
  • 异常捕获:添加try-catch处理权限不足、文件夹不存在等场景:
try
{
    var allFileIds = await GetAllFileIdsInFolderAsync(boxClient, parentFolderId);
}
catch (BoxException ex)
{
    Console.WriteLine($"API调用错误: {ex.Message}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:52:27