Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从Google Drive下载文件时出现错误403_Java_Google Drive Api - Fatal编程技术网

Java 尝试从Google Drive下载文件时出现错误403

Java 尝试从Google Drive下载文件时出现错误403,java,google-drive-api,Java,Google Drive Api,我正在使用Google Drive,但我不时收到来自Google的错误消息:(但仅在尝试下载文件时。删除或添加文件仍然有效) 下面是我用来从Google Drive获取文件流的代码: Credential credential = new GoogleCredential.Builder().setJsonFactory(GsonFactory.getDefaultInstance()) .setTransport(getTransport()).setClientSec

我正在使用Google Drive,但我不时收到来自Google的错误消息:(但仅在尝试下载文件时。删除或添加文件仍然有效)


下面是我用来从Google Drive获取文件流的代码:

    Credential credential = new GoogleCredential.Builder().setJsonFactory(GsonFactory.getDefaultInstance())
       .setTransport(getTransport()).setClientSecrets(secrets).build().setAccessToken(accessToken);
    Drive drive = Drive.Builder(getTransport(), GsonFactory.getDefaultInstance(), 
       getCredential(accessCode, googleClientSecrets)).setApplicationName("XXX").build();
    File file = drive.files().get(googleDocId).execute();
    String url = file.getExportLinks().get(googleMimeType);
    return drive.getRequestFactory().buildGetRequest(new GenericUrl(url)).execute().getContent();
“超出未经认证使用的每日限制。继续使用需要注册。”具有误导性。这意味着你已经达到了某种配额,但事实几乎不是这样


未经验证使用的驱动器配额为零。因此,该消息真正告诉您的是,您的驱动器请求没有携带身份验证令牌。您应该跟踪http,您会发现失败的请求缺少授权头。至于原因,这是读者的一个练习。

我认为这条信息“未经验证的使用的每日限制”超过了。继续使用需要注册。这说明了一切。你是对的。请求中缺少授权标头。然而,很难理解为什么。事实证明,当访问令牌失效时(在其生命期之后),通常google会返回401个未经授权的访问异常(我使用刷新令牌正确地刷新了访问令牌)。但是,当您尝试从google drive下载文件,并且访问令牌无效时,返回403禁止异常错误,并且我没有刷新访问令牌,这是主要问题
    Credential credential = new GoogleCredential.Builder().setJsonFactory(GsonFactory.getDefaultInstance())
       .setTransport(getTransport()).setClientSecrets(secrets).build().setAccessToken(accessToken);
    Drive drive = Drive.Builder(getTransport(), GsonFactory.getDefaultInstance(), 
       getCredential(accessCode, googleClientSecrets)).setApplicationName("XXX").build();
    File file = drive.files().get(googleDocId).execute();
    String url = file.getExportLinks().get(googleMimeType);
    return drive.getRequestFactory().buildGetRequest(new GenericUrl(url)).execute().getContent();