Google Drive API - передача файлов между папками - PullRequest
0 голосов
/ 16 января 2020

Как я могу перенести файлы из одной папки в другую?

Программа загружает файлы в папку «Журнал» с подпапкой «bin». Она также создает (или создаст, как только я ее закодирую) другую папку. называется "Log. (currentdate)" с подпапкой "bin".

Я читал в Интернете, что в Google API нет способа переноса файлов между папками, как вы можете сделать в windows explorer. Вместо этого вы должны изменить идентификаторы родительской папки со старой на новую.

На своем веб-сайте Google предлагает следующий код

String fileId = "1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
String folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
// Retrieve the existing parents to remove
File file = driveService.files().get(fileId)
    .setFields("parents")
    .execute();
StringBuilder previousParents = new StringBuilder();
for (String parent : file.getParents()) {
  previousParents.append(parent);
  previousParents.append(',');
}
// Move the file to the new folder
file = driveService.files().update(fileId, null)
    .setAddParents(folderId)
    .setRemoveParents(previousParents.toString())
    .setFields("id, parents")
    .execute();

Это делается только для одного файла, но мне нужно адаптировать его для всех файлов, а не только для одного.

В моем основном методе это то, что я имею до сих пор. Код печатает имя и идентификатор файла для каждого файла в папке со строкой идентификатора «randomfolderid». Вы можете получить идентификатор папки, посмотрев на URL.

//Get fileIds for every file in folder
        String fileId = "";
        FileList fileIdList = service.files().list()
            .setQ("'randomfolderid' in parents ")
            .execute();
        List<File> files = fileIdList.getFiles();
        if (files == null || files.isEmpty()) {
            System.out.println("No files found.");
        } else {
            System.out.println("Files:");
            for (File file : files) {
                fileId = file.getId();
                System.out.printf("%s (%s)\n", file.getName(), fileId); 

Таким образом, идея заключалась в том, что, пока программа перебирает файлы, для каждого файла File, помимо печати имени и fileId, она будет также измените идентификаторы родительской папки. Полученный код выглядит следующим образом. Опять же, это все в основном методе.

String fileId = "";
        FileList fileIdList = service.files().list()
            .setQ("'17DD5EBwUsMj8vPDtKpznXVLbs3kOHVMw' in parents ")
            .execute();
        List<File> files = fileIdList.getFiles();
        if (files == null || files.isEmpty()) {
            System.out.println("No files found.");
        } else {
            System.out.println("Files:");
            for (File file : files) {
                fileId = file.getId();
                System.out.printf("%s (%s)\n", file.getName(), fileId); 
                //code works fine up till here
                StringBuilder previousParents = new StringBuilder();
                for (String parent : file.getParents()) {
                    previousParents.append(parent);
                    previousParents.append(',');
                }
                // Move the file to the new folder (replace old parent id with new parent id)
                file = service.files().update(fileId, null)
                    .setAddParents(FolderId[1])
                    .setRemoveParents(previousParents.toString())
                    .setFields("id, 'parents")
                    .execute();

FolderId [1] содержит строку folderid, которую я хочу заменить.

Если у вас есть другой способ сделать это, я очень хотелось бы иметь фрагменты кода в качестве примеров.

...