You need to enable JavaScript to run this app. Box.com API获取文件夹全量文件时仅返回1000条的问题问询
优惠活动
大模型
产品
解决方案
定价
更多

Box.com API获取文件夹全量文件时仅返回1000条的问题问询

问题原因

Box 文件夹条目接口的单页返回有硬上限:无论你传入的limit参数设置为多大,单页最多只会返回1000条条目。你传入10000的limit最终会被接口截断为1000,因此仅靠单次调用无法拿到超过1000条的内容。
另外你原代码存在变量名笔误:声明的任务对象为objFileItems,但后续调用的是objFolderItems.Wait(),会直接触发空引用异常,需先修正。

两种调整方案

方案1:手动循环分页拉取(兼容所有SDK版本)

逻辑要点:

  • 用BoxCollection返回的TotalCount字段确认文件夹总条目数
  • 从offset=0开始,每次拉取1000条(即单页最大允许值),将每页的条目追加到总列表
  • 当累计拉取的条目数等于总条目数时终止循环

修正后的代码示例:

// 原有获取文件夹基础信息逻辑保留
Task<BoxFolder> boxFolder1 = objClient.FoldersManager.GetInformationAsync(id: objItem.Id);
boxFolder1.Wait();
WriteLog("Processing Folder => " + boxFolder1.Result.Name);

// 初始化全量条目收集列表
List<BoxItem> allFolderItems = new List<BoxItem>();
int offset = 0;
int pageSize = 1000; // Box单页最大允许值,传更高不会生效

// 循环拉取所有分页
while (true)
{
    // 修正原代码的变量名笔误,传入正确的limit和offset
    Task<BoxCollection<BoxItem>> currentPageTask = objClient.FoldersManager.GetFolderItemsAsync(
        folderId: objItem.Id, 
        limit: pageSize, 
        offset: offset
    );
    currentPageTask.Wait();
    BoxCollection<BoxItem> currentPage = currentPageTask.Result;

    // 把当前页条目加入总列表
    allFolderItems.AddRange(currentPage.Entries);

    // 终止条件:累计拿到的条目数已经等于总条目数,或当前页无内容
    if (allFolderItems.Count >= currentPage.TotalCount || currentPage.Entries.Count == 0)
    {
        break;
    }

    // 偏移量累加,拉取下一页
    offset += pageSize;
}

// 后续原有处理逻辑:筛选PDF文件
if (allFolderItems.Count > 0)
{
    List<BoxItem> objFiles = allFolderItems.Where(i => i.Type == "file").ToList();
    if (objFiles.Count > 0)
    {
        foreach (BoxItem objFile in objFiles)
        {
            if (Path.GetExtension(objFile.Name).ToLower() == ".pdf")
            {
                // Insert metadata into DB 原有逻辑保留
            }
        }
    }
}

方案2:使用SDK内置自动分页参数(适配较新版本Box .NET SDK)

如果你的SDK版本支持GetFolderItemsAsync的autoPaginate参数,无需手动写循环,直接传该参数为true即可让SDK自动完成所有分页的拉取,代码会更简洁:

// 原有获取文件夹基础信息逻辑保留
Task<BoxFolder> boxFolder1 = objClient.FoldersManager.GetInformationAsync(id: objItem.Id);
boxFolder1.Wait();
WriteLog("Processing Folder => " + boxFolder1.Result.Name);

// 直接启用自动分页,SDK会自动拉取所有页数据
Task<BoxCollection<BoxItem>> objFileItems = objClient.FoldersManager.GetFolderItemsAsync(
    folderId: objItem.Id,
    limit: 1000,
    offset: 0,
    autoPaginate: true
);
objFileItems.Wait();

// 后续原有处理逻辑保持不变
if (objFileItems.Result.Entries.Count > 0)
{
    List<BoxItem> objFiles = objFileItems.Result.Entries.Where(i => i.Type == "file").ToList();
    if (objFiles.Count > 0)
    {
        foreach (BoxItem objFile in objFiles)
        {
            if (Path.GetExtension(objFile.Name).ToLower() == ".pdf")
            {
                // Insert metadata into DB 原有逻辑保留
            }
        }
    }
}
注意事项
  • 不要把limit设置为超过1000的值,接口不会生效,反而可能触发参数校验异常
  • 循环分页时要增加异常重试逻辑,避免网络波动导致单页拉取失败中断全量流程
  • 原代码中objFolderItems.Wait()的笔误必须修正,否则代码无法正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 22:24:10