使用SharePoint REST API获取文档库根目录含子文件夹的总文件数
你之前用递归遍历文件夹的方案性能差的核心原因是每一层文件夹都需要发起独立API请求,请求数和文件夹层级/数量正相关,大库场景下耗时会指数级上升。以下两种方案均只需1次API调用即可拿到结果,性能远高于遍历方案:
方案1:列表项过滤查询(最稳定、实时性最高)
SharePoint文档库本质是特殊列表,所有文件/文件夹都是列表的条目,你可以直接通过过滤列表项类型拿到全库文件总数,不会触发5000项列表视图阈值,结果实时准确。
请求端点示例:https://<你的站点域名>/_api/web/lists/getbytitle('<替换为你的文档库显示名称>')/items?$filter=FSObjType eq 0&$top=0&$count=true
参数说明:
FSObjType eq 0:过滤条目类型为文件(值为1时代表文件夹)$top=0:不返回具体条目内容,仅返回计数结果,大幅降低响应体积$count=true:要求接口返回总条目数,结果存在响应的odata.count字段中
方案2:搜索API聚合查询(超大规模库性能更优)
如果你的文档库条目超过10万,优先用搜索API做聚合统计,后端直接返回预计算的结果,响应速度更快,缺点是存在1-15分钟的爬网延迟,不是实时结果。
请求端点示例:https://<你的站点域名>/_api/search/query?querytext='Path:<替换为文档库根路径> AND IsDocument:true'&selectproperties='Title'&rowlimit=0
总文件数在响应的PrimaryQueryResult.RelevantResults.TotalRows字段中。
注意事项
- 两种方案返回的都是调用方权限范围内可见的文件总数,无权限访问的文件不会被计入
- 如果你不需要排除文件夹,只需要统计所有条目总数,可以直接调用文档库自带的
ItemCount属性,端点为/_api/web/lists/getbytitle('<文档库名称>')/ItemCount,响应直接返回数值
内容的提问来源于stack exchange,提问作者Hershika Sharma
相关产品推荐
相关产品推荐

