如何用SharePoint Graph API下载未列为Drive的文档库文件(如Site Pages)
嘿,我来帮你搞定这个问题——我之前也碰到过类似的需求,其实像Site Pages这类没直接列在Drive里的列表,它们的文件还是能通过Graph API下载的,关键是找对正确的接口入口,下面给你两种可行的解决方案:
方法一:直接通过列表项的关联DriveItem获取下载链接
虽然Site Pages不在站点默认的Drive下,但每个列表里的文件项其实都关联着一个driveItem对象,我们可以利用这个导航属性直接拿到下载地址:
获取带DriveItem信息的列表项
发起这个请求,把列表项和对应的DriveItem信息一起拉取出来:GET https://graph.microsoft.com/v1.0/sites/{siteId}/lists/{listId}/items?expand=driveItem拿到响应后,每个列表项的
driveItem字段里会有一个@microsoft.graph.downloadUrl,这就是直接可用的下载链接,你直接发起GET请求就能获取文件内容了。注意这个链接是短期有效的,如果过期了重新调用上面的接口刷新就行。直接下载文件
用拿到的@microsoft.graph.downloadUrl直接发请求,不需要再走Drive的内容接口,非常方便。
方法二:找到Site Pages对应的隐藏Drive
其实Site Pages列表背后对应着站点里的一个隐藏文档库(Drive),我们可以先找到这个Drive的ID,再用你熟悉的Drive接口下载:
枚举站点的所有Drive
先调用这个接口获取站点下的所有Drive:GET https://graph.microsoft.com/v1.0/sites/{siteId}/drives响应里会返回多个Drive,其中对应Site Pages的那个,
name字段通常就是Site Pages,你可以根据这个来识别,或者看description字段辅助判断。用Drive ID下载文件
拿到对应的Drive ID后,就可以用你熟悉的Drive内容下载接口了:GET https://graph.microsoft.com/v1.0/sites/{siteId}/drives/{driveId}/items/{itemId}/content这里的
itemId可以从之前列表项的driveItem.id里拿到,或者直接枚举这个Drive的items获取。
注意:权限要求
别忘了确保你的账号或应用拥有合适的权限,比如:
- 应用权限:
Sites.Read.All或者Sites.ReadWrite.All - 委派权限:
Sites.Read或者Sites.ReadWrite
如果是涉及敏感内容的文件,可能需要更高的权限,根据实际情况调整就行。
内容的提问来源于stack exchange,提问作者SlavaG

