sharepoint - 从 SharePoint 下载 MS Graph API 文件
问题描述
我正在尝试使用 Graph API 从表单库下载 XML 文件,但它不工作。我在这里引用文档,我认为它告诉我正确的语法是GET /sites/{siteId}/drive/items/{item-id}/content
. 但是,当我使用 Graph Explorer 使用该语法时,它会给我 404 File Not Found。接下来我尝试了语法GET /drives/{drive-id}/items/{item-id}/content
并返回状态代码 0,但消息正文只是说 {"isTrusted": true}。我应该注意,如果我删除 URL 上的最后一个参数并使用它的语法GET /drives/{drive-id}/items/{item-id}
确实会带回有关文件的信息。
语法有问题吗?这可能不是您可以对表单库中的 XML 文件执行的操作吗?这可能是 Graph Explorer 的限制吗?
解决方案
当您点击/drives/{drive-id}/items/{item-id}/content
终结点时,Microsoft Graph 会响应 302 重定向,由于 CORS 策略,浏览器会拒绝该重定向。
以下是在 JavaScript 应用程序部分下载 OneDrive 文件的解释:
要在 JavaScript 应用程序中从 OneDrive 下载文件,您不能使用 /content API,因为它会以 302 重定向响应。当需要 CORS 预检时,例如在提供 Authorization 标头时,明确禁止 302 重定向。
相反,您的应用需要选择 @microsoft.graph.downloadUrl 属性,该属性返回 /content 重定向到的相同 URL。然后可以使用 XMLHttpRequest 直接请求此 URL。因为这些 URL 是预先认证的,所以可以在没有 CORS 预检请求的情况下检索它们。
要在 Graph Explorer 中下载文件,首先发出一个包含该@microsoft.graph.downloadUrl
属性的请求:
GET /drive/items/{item-id}?select=@microsoft.graph.downloadUrl
然后可以通过标记对@microsoft.graph.downloadUrl
属性中提供的 Url 的另一个请求来下载文件
推荐阅读
- angular - Angular 12 升级后 Karma 没有运行单元测试
- google-apps-script - 如何将 FOR LOOP 添加到此 Google 脚本代码中?
- java - 机器人竞赛 -> 机器人在笛卡尔网格上移动。L 是左 90 度,R 是右 90 度,F 是向前一格。请看附件截图
- r - 如何使用ggtext将图像绘制为y轴标签?
- java - 创建比可用处理器更多的线程会产生性能开销吗?
- javascript - 查询 INSERT - 引用和反斜杠
- python - 列表列表的内存问题
- javascript - 将原始 CSS 转换为 Javascript DOM 样式属性
- excel - 如何从 Excel 中获取无序集中的下一个最大值
- javascript - 从其他文件导入变量