Google Drive API:使用Java下载文件

时间:2015-07-13 01:20:43

标签: java google-drive-api

因此,使用Google云端硬盘的API,我正在尝试从我的云端硬盘帐户下载文件。我已按照Google的快速入门指南(https://developers.google.com/drive/web/quickstart/java)使用Google的DriveQuickStart.java初始化云端硬盘对象。

对象的一切正常工作(即从我的谷歌驱动器帐户获取所有文件并显示其ID和标题);但是,当我尝试通过Google开发的函数的输入流下载文件时,我不断收到空异常错误。

以下是我正在使用的代码:

 private static InputStream downloadFile(Drive service, File file) {
        if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
            try {
                HttpResponse resp =
                        service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl()))
                                .execute();
                return resp.getContent();
            } catch (IOException e) {
                // An error occurred.
                e.printStackTrace();
                return null;
            }
        } else {
            // The file doesn't have any content stored on Drive.
            return null;
        }
    }

问题是当方法调用file.getDownloadURL()时,它返回一个空值。根据文档,如果我尝试下载的文件是本机Google Drive文件,它应返回空值;但是,我正在下载的文件只是一个jar文件,所以它不能因为文件扩展名(我也尝试过其他格式)。

为什么返回null值,我该怎么做才能解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:3)

想出来。

对于任何挣扎于此的人来说,答案非常简单: 在DriveQuickStart.java代码中,请注意以下部分:

    /** Global instance of the scopes required by this quickstart. */
private static final List<String> SCOPES =
    Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY);

并确保将其设置为:

    /** Global instance of the scopes required by this quickstart. */
private static final List<String> SCOPES =
    Arrays.asList(DriveScopes.DRIVE);

因此,它不起作用的唯一原因是程序没有相应的许可权。