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

求助:使用Microsoft Graph API无法完整下载SharePoint文件夹内全部文件

求助:使用Microsoft Graph API无法完整下载SharePoint文件夹内全部文件

嗨,我之前也碰到过一模一样的问题!这其实是Microsoft Graph API的默认分页机制在搞鬼——它默认每次只返回200条结果,所以你只拿到了第一页的文件,剩下的28个(包括最新的那些)都藏在后续分页里呢。

下面给你具体的解决思路和实现方法:

1. 处理分页响应,拉取所有文件

Graph API在返回结果时,如果还有未返回的数据,会在响应JSON里带上@odata.nextLink字段,这个字段就是下一页数据的请求地址。我们只需要循环请求这个链接,直到没有nextLink为止,就能拿到文件夹里的所有文件了。

给你一段可以直接用的Python示例代码:

import requests

def fetch_all_sharepoint_files(site_id, drive_id, sharepoint_folder, access_token):
    all_files = []
    # 初始请求地址
    current_url = f"https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root:/{sharepoint_folder}:/children"
    # 请求头带上授权token
    headers = {"Authorization": f"Bearer {access_token}"}

    while current_url:
        # 发送请求
        response = requests.get(current_url, headers=headers)
        # 处理请求错误(比如token过期、权限不足)
        response.raise_for_status()
        response_data = response.json()
        
        # 将当前页的文件加入总列表
        all_files.extend(response_data.get("value", []))
        # 获取下一页地址,没有的话返回None,循环自动结束
        current_url = response_data.get("@odata.nextLink")
    
    return all_files

# 调用示例(记得替换成你的实际参数)
# all_files = fetch_all_sharepoint_files("你的site_id", "你的drive_id", "你的文件夹路径", "你的access_token")
# print(f"成功获取到 {len(all_files)} 个文件")

2. 可选:按修改时间排序,确保拿到最新文件

如果你的需求是优先获取最新文件,或者想确认最新文件已被包含,可以在请求URL里加上排序参数,让结果按修改时间倒序排列:

# 带排序的初始请求URL
current_url = f"https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root:/{sharepoint_folder}:/children?$orderby=lastModifiedDateTime desc"

这样最新修改的文件会排在最前面,你也能直观确认是否拿到了目标文件。

另外要注意,确保你的access_token拥有足够的权限(比如Files.Read或Files.ReadWrite),不然可能会出现部分文件无法获取的情况哦。

备注:内容来源于stack exchange,提问作者DD08

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:22:56