如何在 Google 驱动器中的文件夹中创建文件夹?

How to make folders within folders in Google Drive?

我知道如何使用 Java 的 API v2 在 Google 驱动器中创建文件夹: https://developers.google.com/drive/v3/web/folder#creating_a_folder

但是我如何在文件夹中创建一个文件夹,以将我的文件放入其中?

假设我有一个文件 myfile 我想上传到 Google 驱动器中的 /myfolder1/myfolder2/ 目录,我应该先创建 myfolder1,然后获取它的 ID,然后创建 myfolder2 并设置它myfolder1 的父级,然后将 myfile 的父级设置为 myfolder1? 有更好的方法吗?

我也在添加代码:

private File insertFile(String filePath) {
    // Set file's metadata on the server
    File body = new File();
    // Title of the file to insert, including the extension.
    body.setTitle(getFileName(filePath) + "." + getExtension(filePath));
    body.setMimeType(null);
    body.setFileExtension(getExtension(filePath));

    // folderList is string array of the name of the parent folders for the  file
    String[] folderList = getFoldersList(filePath);

    File folder1 = new File();
    folder1.setMimeType("application/vnd.google-apps.folder");
    folder1.setTitle(folderList[0]);
    try {
        folder1 = this.service.files().insert(folder1).execute();
    }
    catch (IOException e){
        e.printStackTrace();
    }

    File folder2 = new File();
    folder2.setMimeType("application/vnd.google-apps.folder");
    folder2.setTitle(folderList[1]);
    folder2.setParents(Arrays.asList(new ParentReference().setId(folder1.getId())));
    try {
        folder2 = this.service.files().insert(folder2).execute();
    }
    catch (IOException e){
        e.printStackTrace();
    }

    body.setParents(Arrays.asList(new ParentReference().setId(folder2.getId())));


    // Set file's content.
    java.io.File fileContent = new java.io.File(filePath);
    // Set file's type
    FileContent mediaContent = new FileContent(null, fileContent);

    try {
        File file = this.service.files().insert(body, mediaContent).execute();
        return file;
    } catch (IOException e) {
        Log.v(DEBUG_TAG, "An error occurred while uploading.");
        e.printStackTrace();
        return null;
    }
}

谢谢

这里有一个处理它的小函数,您可以使用返回的 ID 作为您正在创建的文件的 parentId,文件将在多个文件夹中创建:)

// This function gets an array of Strings representing a file's parent folders
// And returns the most inner parent folder's ID
private String makeParentFolders(String[] parentList) {

    File folder = null;
    String folderId = null;
    for(int i = 0; i < parentList.length; i++) {
        folder = new File();
        folder.setMimeType(getMimeType("folder"));
        folder.setTitle(parentList[i]);
        if (i > 0) {
            folder.setParents(Arrays.asList(new ParentReference().setId(folderId)));
        }
        try {
            folder = this.service.files().insert(folder).execute();
            folderId = folder.getId();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

    return folder.getId();
}

如果有人想出更优雅的方法,请在此处post。