如何使用drive api java从谷歌驱动器下载文件?

我尝试了一些谷歌硬盘的function,但我无法从云端硬盘下载该文件。

这是我使用的代码

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()为NULL。

我在这里想念的是什么?

现在它在我调用下载函数之前添加以下行之后执行

 File file1 = service.files().get(fileid).execute(); downloadFile(service,file1); 

现在的问题是如何在脚本的“响应”的帮助下下载文件….

Google文档原生格式的文档没有downloadUrl字段,您可以使用exportLinks集合导出它们:

https://developers.google.com/drive/manage-downloads#downloading_google_documents

这是我创建的从gooogle驱动器下载文件希望它会帮助你。

请参阅此文档

 /** Application name. */ private static final String APPLICATION_NAME = "Drive API Java Quickstart"; /** Directory to store user credentials for this application. */ private static final java.io.File DATA_STORE_DIR = new java.io.File( System.getProperty("user.home"), ".credentials/n/drive-java-quickstart"); /** Global instance of the {@link FileDataStoreFactory}. */ private static FileDataStoreFactory DATA_STORE_FACTORY; /** Global instance of the JSON factory. */ private static final JsonFactory JSON_FACTORY = JacksonFactory .getDefaultInstance(); /** Global instance of the HTTP transport. */ private static HttpTransport HTTP_TRANSPORT; /** * Global instance of the scopes required by this quickstart. * * If modifying these scopes, delete your previously saved credentials at * ~/.credentials/drive-java-quickstart */ private static final java.util.Collection SCOPES = DriveScopes .all(); static { try { HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); } catch (Throwable t) { t.printStackTrace(); System.exit(1); } } /** * Creates an authorized Credential object. * * @return an authorized Credential object. * @throws IOException */ public static Credential authorize() throws IOException { // Load client secrets. InputStream in = Quickstart.class .getResourceAsStream("/client_secret.json"); GoogleClientSecrets clientSecrets = GoogleClientSecrets.load( JSON_FACTORY, new InputStreamReader(in)); // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(DATA_STORE_FACTORY) .setAccessType("offline").build(); Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); return credential; } /** * Build and return an authorized Drive client service. * * @return an authorized Drive client service * @throws IOException */ public static Drive getDriveService() throws IOException { Credential credential = authorize(); return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName(APPLICATION_NAME).build(); } public static void main(String[] args) throws IOException { // Build a new authorized API client service. Drive service = getDriveService(); // Print the names and IDs for up to 10 files. FileList result = service.files().list().execute(); List files = result.getFiles(); if (files == null || files.size() == 0) { System.out.println("No files found."); } else { for (File file : files) { String fname = file.getName(); String ex = fname.substring(fname.lastIndexOf(".") + 1); try { Files f = service.files(); HttpResponse httpResponse = null; if (ex.equalsIgnoreCase("xlsx")) { httpResponse = f .export(file.getId(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") .executeMedia(); } else if (ex.equalsIgnoreCase("docx")) { httpResponse = f .export(file.getId(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document") .executeMedia(); } else if (ex.equalsIgnoreCase("pptx")) { httpResponse = f .export(file.getId(), "application/vnd.openxmlformats-officedocument.presentationml.presentation") .executeMedia(); } else if (ex.equalsIgnoreCase("pdf") || ex.equalsIgnoreCase("jpg") || ex.equalsIgnoreCase("png")) { Get get = f.get(file.getId()); httpResponse = get.executeMedia(); } if (null != httpResponse) { InputStream instream = httpResponse.getContent(); FileOutputStream output = new FileOutputStream( file.getName()); try { int l; byte[] tmp = new byte[2048]; while ((l = instream.read(tmp)) != -1) { output.write(tmp, 0, l); } } finally { output.close(); instream.close(); } } } catch (Exception e) { e.printStackTrace(); } } }