如何在 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。
我知道如何使用 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。