5

我有一个 Web 应用程序需要列出我的 Google Drive 中的所有文件,然后在单击时获取它们。我使用 OAuth 进行身份验证,它似乎可以工作(相同的代码适用于 Calendar API)。我在 serviceAccountScopes 中尝试了不同的范围但无济于事。

基本上身份验证是:

credential = new GoogleCredential.Builder().
setTransport(HTTP_TRANSPORT).
setJsonFactory(JSON_FACTORY).
setServiceAccountId(apiEmail).
setServiceAccountScopes(DriveScopes.DRIVE).
setServiceAccountPrivateKeyFromP12File(p12File).build();

credential.refreshToken();

service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).
setApplicationName("My API").build();

编辑:我应该在 refreshToken() 调用之前添加该凭证的 accessToken 为空。

之后我尝试:

FileList files = service.files().list().execute();

返回的 FileList 是(应该包含项目):

{"etag":"\"_U9FTLXcHskmKgrWAZqJlfW8kCo/vyGp6PvFo4RvsFtPoIWeCReyIC8\"","items":[],"kind":"drive#fileList","selfLink":"https://www.googleapis.com/drive/v2/files"}

如果我检查 selfLink 的内容是:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}

每日限制在这里不是问题。(我想这与这个问题无关,因为:https ://stackoverflow.com/a/10639679/2090125 )。另外,我在控制台中启用了 Drive 和 Drive SDK ( https://stackoverflow.com/a/10329353/2090125 )。

下载文件时,执行以下操作:

File file = service.files().get(fileId).execute();

它会产生这个(fileId 存在):

An error occured: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
  "code" : 404,
  "errors" : [ {
    "domain" : "global",
    "message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM",
    "reason" : "notFound"
  } ],
  "message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM"
}

在检查https://www.googleapis.com/drive/v2/files/0B97KF40kTwrTaTllMnZCTV9ZSnM时再次看到相同的“dailyLimitExceededUnreg”。

这是怎么回事,我的身份验证有问题吗?我应该以某种方式在 Drive SDK 中配置 Drive Integration 吗?从谷歌的文档中我了解到这不是必需的,我使用的方法应该可以在没有进一步配置的情况下工作。

4

0 回答 0