簡體   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