如何使用Document ID调用Microsoft Graph下载SharePoint存储的文档
解决方案
1. 核心字段确认
SharePoint的Document ID固定存储在文档库列表项的_dlc_DocId字段中,该字段为系统内置字段,启用Document ID功能后自动生成,无需额外配置。
你之前查询失败是因为DriveItem的search接口默认不包含该自定义字段的检索范围,需要通过列表项查询接口筛选。
2. 可行实现方案
方案1:通过Microsoft Graph列表筛选查询(推荐)
直接调用站点下的列表项接口,按_dlc_DocId筛选,可直接获取关联的driveItem信息:
- 先获取目标站点的ID,若需要全站/跨站检索,可先遍历所有站点ID
- 调用接口获取站点下所有文档库ID:
GET /sites/{站点ID}/lists?$filter=template eq 'documentLibrary'&$select=id - 遍历每个文档库,执行筛选查询:
GET /sites/{站点ID}/lists/{文档库ID}/items?$expand=fields&$filter=fields/_dlc_DocId eq '你的Document ID值'&$select=id,driveItem - 返回结果中的
driveItem字段就包含文件的下载地址、存储路径、名称等所有你需要的信息,直接用你现有的下载逻辑处理即可。
方案2:修复DocIdRedir.aspx重定向403问题
你之前curl请求403是因为没有携带合法的应用权限令牌,请求时在Header中添加Authorization: Bearer {你的应用权限access_token}即可正常获取302重定向地址,从重定向地址中可解析出文件的实际存储路径。
注意令牌需要配置Sites.Read.All或更高的应用权限,且已经过管理员同意。
3. PHP实现示例(基于microsoft-sdk-php)
<?php // 替换为你自己的配置 $siteId = "xxxxxx.sharepoint.com,xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; $targetDocId = "XXXXXXX-2222222222-86"; $accessToken = "你的应用权限访问令牌"; // 初始化已配置好的Graph客户端实例 $graph = new Microsoft\Graph\Graph(); $graph->setAccessToken($accessToken); // 获取当前站点所有文档库 $lists = $graph->createRequest("GET", "/sites/$siteId/lists?\$filter=template eq 'documentLibrary'&\$select=id") ->execute() ->getBody()['value']; $targetDriveItem = null; foreach ($lists as $list) { // 按Document ID筛选当前文档库下的条目 $items = $graph->createRequest("GET", "/sites/$siteId/lists/{$list['id']}/items?\$expand=fields&\$filter=fields/_dlc_DocId eq '$targetDocId'&\$select=id,driveItem") ->execute() ->getBody()['value']; if (!empty($items)) { $targetDriveItem = $items[0]['driveItem']; break; } } if ($targetDriveItem) { // 拿到下载地址后执行原有下载逻辑 $downloadUrl = $targetDriveItem['@microsoft.graph.downloadUrl']; file_put_contents("本地存储路径/".$targetDriveItem['name'], fopen($downloadUrl, 'r')); } ?>
注意事项
- 必须配置应用类型的
Sites.Read.All或Sites.ReadWrite.All权限,且完成管理员全局同意,委派权限无法满足静默检索全站文档的需求 - 如果需要跨所有站点检索,可先调用
GET /sites接口获取租户下所有站点ID,再依次遍历每个站点下的文档库即可
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

