求助:使用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
相关产品推荐
相关产品推荐

