如何通过Microsoft Graph API读取SharePoint文件内容?
问题概述
我希望与SharePoint平台集成并使用其提供的API,目标是获取站点内所有文档的内容。已创建拥有AllSites.Read和AllSites.Write权限的OAuth2应用,目前完成的步骤:
- 通过
https://graph.microsoft.com/v1.0/sites?search=\\*获取所有站点 - 获取站点ID后,调用
https://graph.microsoft.com/v1.0/sites/xxxxx.sharepoint.com/drives/获取驱动器 - 用驱动器ID调用
https://graph.microsoft.com/v1.0/sites/xxxxx.sharepoint.com/drives/{drive-id}/items/root/children获取驱动器内项目,但该端点仅提供文件下载链接,无法直接读取内容 - 尝试调用
https://graph.microsoft.com/v1.0/sites/xxxxx.sharepoint.com/lists/{list-id}/items/{item-id}/driveItem/content获取文档内容,返回二进制响应,用iso-8859-1和utf-8解码均无法得到实际内容
请问是否有可用于读取文件内容的API端点?
解决方案
1. 文本类文件直接读取(txt、md、csv等)
针对纯文本或结构化文本文件,可在/content端点后附加$format=text参数,直接获取可读文本内容:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/items/{file-id}/content?$format=text
也可通过列表项关联的driveItem调用:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items/{item-id}/driveItem/content?$format=text
2. Office文档转换读取(Word、Excel、PPT)
对于Office格式文件,可调用专门的转换端点将内容转为文本或结构化格式:
- Word文档转文本:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/items/{file-id}/content?format=txt
- Excel指定工作表转CSV:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/items/{file-id}/workbook/worksheets/{worksheet-id}/usedRange/$format=csv
- PPT文档转文本:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/items/{file-id}/content?format=txt
3. 二进制响应处理注意事项
如果直接获取二进制响应无法解码,需注意:
- 保持请求头默认的
Accept: application/octet-stream,不要强制设置文本类型的Accept头 - 根据文件实际编码处理:比如中文文档可能为GBK、UTF-16等,需先识别编码再解码
- 非文本文件(图片、PDF等)直接保存二进制流,不要尝试用文本编码解码
4. 批量获取文档内容的优化流程
若需批量处理站点内所有文档,建议按以下路径操作:
- 获取站点所有驱动器:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives - 递归遍历每个驱动器的文件夹与文件:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/items/{folder-id}/children - 根据文件扩展名调用对应的内容读取或转换端点
内容的提问来源于stack exchange,提问作者George Xydias
相关产品推荐
相关产品推荐

