如何使用Java Drive Rest V2 API从Google Drive获取文档和文件的绝对路径?

我正在使用Java Drive Rest V2 API开发Google Drive Integration ,我能够获得除文档/文件路径之外的大多数文档/文件元数据属性。

我也提到了以下StackOverflow问题:

  • 如何使用java从谷歌驱动器获取完整的文件路径
  • 在Google Drive API v2中按“完整路径”查找文件的正确方法是什么

在两个链接中,解决方案表明我必须创建一个单独的方法来实现此要求,这意味着Drive Rest V2 API没有提供直接方法来获取文件路径。

请指导我并就此提出建议。

谢谢,

Arpit

尝试使用Parents.get 。 成功的请求将返回父级和文件本身的链接。 这是一个示例响应:

{ "kind": "drive#parentReference", "id": "0Bw-w9jw2bwglbzlvMVh2cll2dmM", "selfLink": "https://www.googleapis.com/drive/v2/files/1-ABCDEzyvp9NFmWz7h6ssgkTKHytO1Nq4SNIboDW8A/parents/0Bw-w9jw2bwglbzlvMVh2cll2dmM", "parentLink": "https://www.googleapis.com/drive/v2/files/ABCDEjw2bwglbzlvMVh2cll2dmM", "isRoot": false } 

这是文档中的JAVA实现:

  private static boolean isFileInFolder(Drive service, String folderId, String fileId) throws IOException { try { service.parents().get(fileId, folderId).execute(); } catch (HttpResponseException e) { if (e.getStatusCode() == 404) { return false; } else { System.out.println("An error occured: " + e); throw e; } } catch (IOException e) { System.out.println("An error occured: " + e); throw e; } return true; } 

分享我的解决方案,这将有助于其他人:))…

经过多次Google搜索以及Google Drive Rest V2 API的 Google云端硬盘文档后,我发现没有方法可以调用/获取完整的文件路径。

所以我创建了以下两种自定义方法来实现我的问题解决方案

  1. getFilePath(drive,file) ”,带字符串返回类型。
  2. getfoldersList(drive,parentReferencesList,folderList) ”与List of String返回类型。

以下是代码段

 public static void main(String[] args) throws IOException { // Build a new authorized API client service. Drive service = getDriveService(); try { // Print the file path and name. FileList result = service.files().list().execute(); List files = result.getItems(); if (files == null || files.size() == 0) { System.out.println("No files found."); } else { System.out.println("Files:"); for (File file : files) { if (!(file.getMimeType().contains("folder"))) { String filePath = null; if (!(file.getParents().isEmpty())) { filePath = getFilePath(service, file); } System.out.println("path: " + filePath); System.out.println("name: " + file.getTitle()); System.out.println(); } } System.out.println("== END =="); } } catch (Exception e) { System.out.println(e); } } private static String getFilePath(Drive drive, File file) throws IOException { String folderPath = ""; String fullFilePath = null; List parentReferencesList = file.getParents(); List folderList = new ArrayList(); List finalFolderList = getfoldersList(drive, parentReferencesList, folderList); Collections.reverse(finalFolderList); for (String folder : finalFolderList) { folderPath += "/" + folder; } fullFilePath = folderPath + "/" + file.getTitle(); return fullFilePath; } private static List getfoldersList(Drive drive, List parentReferencesList, List folderList) throws IOException { for (int i = 0; i < parentReferencesList.size(); i++) { String id = parentReferencesList.get(i).getId(); File file = drive.files().get(id).execute(); folderList.add(file.getTitle()); if (!(file.getParents().isEmpty())) { List parentReferenceslist2 = file.getParents(); getfoldersList(drive, parentReferenceslist2, folderList); } } return folderList; } 

谢谢,

Arpit Bora