繁体   English   中英

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

[英]How to get absolute path of a document and file from Google Drive Using Java Drive Rest V2 API?

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

我还提到了以下StackOverflow问题:

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

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

谢谢,

Arpit

分享我的解决方案,这将对其他人有所帮助:)...

经过几次Google搜索并从Google Drive文档中获得了Java Drive Rest V2 API ,我知道没有方法可以调用/获取完整的文件路径。

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

  1. 具有字符串返回类型的“ getFilePath(drive,file) ”。
  2. getfoldersList(drive,parentReferencesList,folderList) ”与字符串返回类型的列表。

以下是代码段

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<File> 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<ParentReference> parentReferencesList = file.getParents();
    List<String> folderList = new ArrayList<String>();

    List<String> finalFolderList = getfoldersList(drive, parentReferencesList, folderList);
    Collections.reverse(finalFolderList);

    for (String folder : finalFolderList) {
        folderPath += "/" + folder;
    }

    fullFilePath = folderPath + "/" + file.getTitle();

    return fullFilePath;
}

private static List<String> getfoldersList(Drive drive, List<ParentReference> parentReferencesList, List<String> 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<ParentReference> parentReferenceslist2 = file.getParents();
            getfoldersList(drive, parentReferenceslist2, folderList);
        }
    }
    return folderList;
}

-

谢谢,

Arpit Bora

尝试使用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;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM