Перемещение созданных файлов между папками дает странное поведение «Shared With Me» - PullRequest
0 голосов
/ 03 октября 2018

Моя цель - создать электронную таблицу в определенной папке.Я создаю электронную таблицу с API листов V4 и папку, используя API-интерфейс диска V3 в Java.

Однако я не знаю, возможно ли создать электронную таблицу в определенной папке.Если это возможно (в java), пожалуйста, дайте мне знать.

Чтобы добиться той же функциональности, что и создание электронной таблицы в папке, я создаю электронную таблицу и затем перемещаю ее в папку, созданную ранее.Я использую приведенный ниже пример кода https://developers.google.com/drive/api/v3/folder (перемещение файлов между папками).

Я создаю их с использованием учетной записи службы.

Когда я создаю папку и электронную таблицу, переместите электронную таблицу в эту папку, затем добавьте разрешения на запись в мою учетную запись Google, чтобы иметь возможность просматривать их в браузере. Я вижу, что в разделе «Shared with me» я вижу папку F и файл SS-1, кака внутри папки F тот же файл SS-1.Когда я печатаю родителей файла электронной таблицы SS-1, я вижу только одного родителя, который является папкой F.

Впоследствии, когда я добавляю дополнительные файлы SS-2, SS-3 и т. Д., Переместите его впапку F и дать разрешения на запись для моей учетной записи Google, я могу видеть все эти файлы только в папке F, как и ожидалось.

Я не могу выяснить, есть ли ошибка в моем коде, так как, когда я печатаю родительский файл файла SS-1, я вижу только одного родителя, который является идентификатором файла папки F. Следовательно, я не уверен, почему ясм. файл SS-1 как в папке F, так и непосредственно в разделе «Доступен мне» на том же уровне папки F.

Есть ли какие-либо указатели для отладки этого?В качестве альтернативы, есть ли более простой способ создания электронной таблицы непосредственно в определенной папке?

1 Ответ

0 голосов
/ 03 октября 2018

Чтобы создать файл непосредственно в заданной папке, вы используете Drive API (поскольку Sheets API - это все, что касается манипулирования содержимым электронной таблицы (а не метаданными типа «где я могу найти эту электронную таблицу»):

С необработанным REST API это так же просто, как:

POST https://www.googleapis.com/drive/v3/files?fields=createdTime%2Cid%2Cname%2Cparents

{
  "mimeType": "application/vnd.google-apps.spreadsheet",
  "parents": [
    "some folder id"
  ],
  "name": "API Explorer Sheet in Folder"
}

Resp:

{
  "id": "your new spreadsheet's id",
  "name": "API Explorer Sheet in Folder",
  "parents": [
    "some folder id"
  ],
  "createdTime": "2018-10-03T18:30:04.554Z"
}

Демонстрационная ссылка
Очевидно, вы можетепредоставить дополнительные метаданные запроса, чтобы повлиять на созданный файл.

Добавление файла в папку аналогично возможно с помощью клиентской библиотеки Google Google - на странице «Работа с папками» в Drive API есть пример кода это делает именно это для фотографии. Адаптация к файлу Google Sheets, который имитирует вышеупомянутый запрос POST:

String folderId = "some folder id";
File fileMetadata = new File();
fileMetadata.setName("some file title");
fileMetadata.setParents(Collections.singletonList(folderId));
fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet");
File file = driveService.files().create(fileMetadata)
    .setFields("id, parents, name") // properties in the response
    .execute();
System.out.println("File ID: " + file.getId());
...