我使用以下代码使用 GDrive v2 api 从Google云端硬盘下载pdf文件。
public InputStream downloadFile(Drive service, String fileId) {
try {
System.out.println("From Down load file file id" + fileId);
System.out.println("From Down load file file id" + service);
File file = service.files().get(fileId).execute();
String downloadUrl = file.getDownloadUrl();
if (downloadUrl != null && downloadUrl.length() > 0) {
HttpResponse resp = service.getRequestFactory()
.buildGetRequest(new GenericUrl(downloadUrl)).execute();
System.out.println("resp content: " + resp.getContent());
return resp.getContent();
} else {
// The file doesn't have any content stored on Drive.
return null;
}
} catch (IOException e) {
// An error occurred.
e.printStackTrace();
return null;
}
}
我正在警告说#34;腐败或不支持的文件格式"当我打开下载的pdf文件时。在Google开发者控制台中,他们提到使用以下行
String downloadUrl = file.getExportLinks().get("application/pdf");
但是当我使用上面这行时,我得到空指针异常。请问ANyone请告诉我如何在我的代码中替换上面的代码来下载pdf文件并打开文件。 此外,我想知道谷歌硬盘中的文件是否已完全下载。
请帮帮我。
提前致谢。
答案 0 :(得分:0)
您不必在API中使用导出选项,因为pdf文件仅在驱动器中可用,并且没有从Google doc格式转换为任何转换格式(如pdf)。这就是为什么你得到NPE
获取导出链接的原因。您可以直接通过API发出Http Get请求来下载文件,如下所示
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;
}
}
您必须创建FileOutputStream
而不是ByteArrayOutputStream
来创建包含InputStream
的文件。以下代码段可能会有所帮助
OutputStream outputStream = new FileOutputStream(new File("/home/input.pdf"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
确保在使用后冲洗OutputStream
并关闭两个流。
注意:在与OP讨论后,我得到了这个详细的答案。为简单起见,OP使用ByteArrayOutputStream
而不是FileOutputStream
来创建pdf文件。希望这有助于某人经过!