Google Drive API:下载文件出现lockedDomainCreationFailure 错误

Sup*_*n79 1 javascript google-api oauth-2.0 google-drive-api google-drive-picker

我正在尝试使用 Google Drive 文件选择器下载文件(基于此示例https://gist.github.com/Daniel15/5994054)。文件选择器在下载文件时工作良好。它遇到 400 Bad-Request (lockedDomainCreationFailure) 错误。

这是代码:

function downloadFile(file, callback) {
  if (file.downloadUrl) {
    var accessToken = gapi.auth.getToken().access_token;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', file.downloadUrl);
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
    xhr.onload = function() {
      callback(xhr.responseText);
    };
    xhr.onerror = function() {
      callback(null);
    };
    xhr.send();
  } else {
    callback(null);
  }
}
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "lockedDomainCreationFailure",
    "message": "The OAuth token was received in the query string, which this API forbids for response formats other than JSON or XML. If possible, try sending the OAuth token in the Authorization header instead."
   }
  ],
  "code": 400,
  "message": "The OAuth token was received in the query string, which this API forbids for response formats other than JSON or XML. If possible, try sending the OAuth token in the Authorization header instead."
 }
}
Run Code Online (Sandbox Code Playgroud)

它告诉我们在查询字符串中给出了 OAuth 令牌,但据我所知,这是不正确的。这是请求:

GET /drive/v2/files/{file-id}?key={app-key}&alt=media&source=downloadUrl HTTP/3
Host: content.googleapis.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: */*
Accept-Language: en,de;q=0.7,en-US;q=0.3
Accept-Encoding: gzip, deflate, br
Authorization: Bearer {oauth-token}
Origin: http://localhost:8800
DNT: 1
Connection: keep-alive
Referer: http://localhost:8800/
TE: Trailers
Run Code Online (Sandbox Code Playgroud)

由于我使用的是 Google API 提供的下载网址,并且授权是在请求标头中给出的,因此我不知道为什么会遇到此错误。

我很欣赏任何想法。

Sup*_*n79 6

解决方案是将主机content.googleapis.com(从 Google API 作为下载网址提供的主机)更改为www.googleapis.com. 感谢ziganotschka的提示!

所以正确的下载地址是https://www.googleapis.com/drive/v2/files/{file-id}?key={app-key}&alt=media&source=downloadUrl。它必须包含“alt”和“source”查询参数,否则您只能获取文件元数据,而不能获取其内容。无需更改“Accept”标头。