在 JavaScript 应用中使用 OneDrive API(CORS 支持)

OneDrive API 支持 HTTP 访问控制 (CORS),这样单页 JavaScript 应用便可以通过常见 XMLHttpRequest 模式使用 OneDrive API。

可以访问维基百科W3C CORS Wiki,详细了解 CORS(跨源资源共享)。

示例代码

OneDrive 资源管理器 JS 示例应用展示了如何在 JavaScript 应用中使用 OneDrive API。 此示例展示了如何在 JavaScript 中浏览和导航用户的 OneDrive 内容。

可以试用 OneDrive 资源管理器示例应用,也可以查看源代码

示例请求

此示例创建 CORS 请求,以便向 /drive/root/children 终结点发送 GET 请求,从而返回用户的 OneDrive 项。 此示例是使用 test-cors.org 生成。

var createCORSRequest = function(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // Most browsers.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // IE8 & IE9
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // CORS not supported.
    xhr = null;
  }
  return xhr;
};

var url = 'https://graph.microsoft.com/v1.0/me/drive/root/children';
var method = 'GET';
var xhr = createCORSRequest(method, url);

xhr.onload = function() {
  // Success code goes here.
};

xhr.onerror = function() {
  // Error code goes here.
};

xhr.setRequestHeader('Authorization', 'Bearer access_token_value');
xhr.send();

在 JavaScript 应用中下载 OneDrive 文件

不能使用 /content API 在 JavaScript 应用中下载 OneDrive 文件,因为这样会生成 302 重定向作为响应。 如果必须执行 CORS 预检(例如,在提供授权标头时),明确禁止使用 302 重定向。

应用需要改为选择 @microsoft.graph.downloadUrl 属性,这将返回 /content 重定向到的相同 URL。 然后,便可以使用 XMLHttpRequest 直接向此 URL 发出请求。 由于这些 URL 已预先验证,因此可以在没有 CORS 预检请求的情况下检索它们。

示例

若要检索文件的下载 URL,请先发出包含 @microsoft.graph.downloadUrl 属性的请求:

GET /drive/items/{item-id}?select=id,@microsoft.graph.downloadUrl

这会返回文件的 ID 和下载 URL:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "12319191!11919",
  "@microsoft.graph.downloadUrl": "https://..."
}

然后,可以使用 XMLHttpRequest 向 @microsoft.graph.downloadUrl 中提供的 URL 发出请求,从而检索文件。