我尝试通过Microsoft Graph从OneDrive下载多个文件。
我非常接近实现目标。目前我已经管理了令牌系统(特别是通过Jay Lee detailed answer),并实现了解决我在Microsoft Graph中存在的不同端点之间的混淆(谢谢Marc LaFleur - MSFT)。
现在我真的致力于API的调用,允许下载我想要的文件。这就是我的进展:
1-正如我在Microsoft Graph Documentation中看到的那样,正常的语法如下:
curl -w %{time_total} https://graph.microsoft.com/v1.0/me/drive/items/01M...WU/content -H "Authorization: Bearer $access_token"
2-但是,这给了我一个302请求,我无法在bash中处理。所以我寻找另一个解决方案,我发现这个Microsoft article解释了:
"要在JavaScript应用中从OneDrive下载文件,您无法使用/ content API,因为它会以302重定向进行响应。当需要CORS预检时,例如提供授权标题时,明确禁止302重定向。
相反,您的应用需要选择@ microsoft.graph.downloadUrl属性,该属性返回/ content重定向到的相同网址。然后可以使用XMLHttpRequest直接请求此URL。由于这些URL是经过预先验证的,因此可以在没有CORS预检请求的情况下检索它们。"
它谈论Javascript,但我认为它可以应用于我的案例。
3-所以我尝试了这种方法,并写道:
curl "https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl" -H "Authorization: Bearer $access_token"
它给了我通常允许我最终下载文件的URL,但是当我执行它时,我收到以下响应:
代码:
curl "https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity" -H "Authorization: Bearer $access_token"
(这正是我之前提出的要求)
响应:
有任何帮助吗?为什么这是一个糟糕的请求,因为我已经准确地提出了我从graph.microsoft.com请求中得到的内容?
答案 0 :(得分:2)
https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity
是@odata.context
注释,这不是您所追求的。您需要从@microsoft.graph.downloadUrl
注释中提取URL并使用它来获取文件内容。您所访问的网址应在其中提及download.aspx
。