使用Google的Google Drive SDK(v2-rev57-1.13.2-beta),我正在尝试导出Google的专有格式。我可以下载非专有格式。
要获取文件的路径,documentation说要调用:
com.google.api.services.drive.model.File.getExportLinks("application/vnd.openxmlformats-officedocument.wordprocessingml.document")
将Google文档导出(例如)作为MS Word文档。这样做会产生一个明显有效的URL。 (我也尝试过“text / plain”,结果相同)。
但是,当我尝试从该路径下载时,Google Drive SDK会在内部抛出NullPointerException:
java.lang.NullPointerException
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:194)
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:150)
at com.redacted.mycode.GoogleDocsConnection.download(GoogleDocsConnection.java:182)
...
还有其他人在体验这个吗?我正在考虑自己修改Google的SDK,但我想知道是否有人遇到过这个问题(也许还有一个解决方案)。
由于
答案 0 :(得分:1)
更新的答案:
我没有彻底阅读最初的问题,也没有注意到只有Google原生格式的文档会发生这种情况。
获得文档的有效导出链接后,您必须构建授权的GET请求。这样做的代码类似于下面files.get
代码段中的代码,您只需要使用导出网址替换下载网址:
private static InputStream downloadFile(Drive service, String exportUrl) {
try {
HttpResponse resp =
service.getRequestFactory()
.buildGetRequest(new GenericUrl(exportUrl))
.execute();
return resp.getContent();
} catch (IOException e) {
// An error occurred.
e.printStackTrace();
return null;
}
}
OLD ANSWER(请忽略):
NullPointer异常可能是由未经授权的初始下载请求引起的。以下代码显示了如何从云端硬盘下载文件:
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;
}
}
只需确保您传递给service
的{{1}}个实例已获得正确授权。
如果您使用此代码且确定您的服务已获得正确授权,请显示您的应用发送的HTTP请求以及相应的响应。