我有一个 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 吗?从谷歌的文档中我了解到这不是必需的,我使用的方法应该可以在没有进一步配置的情况下工作。