因此,使用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值,我该怎么做才能解决这个问题?谢谢!
答案 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);
因此,它不起作用的唯一原因是程序没有相应的许可权。