Копирование Google Диска, Team Drive (Сервис) на Мой диск (Пользователь) - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать то, что я думал, было бы простой операцией, но у меня есть некоторые проблемы с API Google.У меня есть два Google Credentials, один из учетной записи службы и один Access / Refresh от пользователя, который прошел проверку подлинности в приложении.

У учетной записи службы есть делегирование по всему домену.

На командном диске, к которому у учетной записи службы есть доступ (шаблоны), у меня есть документ, который я хотел бы скопировать на Мой диск пользователя (root).У меня есть идентификатор папки через:

String userRootId = userCredential.drive().files().get( "root" ).setFields( "id" ).execute().getId();

, который возвращает правильный идентификатор.Когда я использую Сервисную учетную запись для копирования файла, я могу делать копии на Team Drive весь день.Когда я копирую его на диск пользователя, я получаю «Файл не найден: $ userRootId».

Я предполагаю, что это связано с тем, что Сервисная учетная запись не может получить доступ к Моему диску Пользователя.Как я могу заставить эту операцию работать?Кто-нибудь пытался это сделать?

1 Ответ

0 голосов
/ 23 декабря 2018

Хорошо, так что я нашел способ, который работает для моей реализации.У меня есть токен доступа / обновления целевого пользовательского диска.Если у вас этого нет, я не уверен, как вы могли бы заставить это работать.Шаги следующие:

  1. Получить корень СЕРВИСНОЙ УЧЕТНОЙ ЗАПИСИ, используя:

    String serviceRootId = this.serviceManager.drive().files().get( "root" ).setFields( "id" ).execute().getId();
    
  2. Используйте служебную учетную запись для копирования файла

    • Удалите Team Drive
    • установите родительский элемент для корневого идентификатора службы.Это удаляет его с командного диска, так что вы действительно можете что-то с ним сделать.
  3. Предоставить общий доступ к файлу пользователю с правами «писателя» (это устраняет любые проблемы с доменом)
  4. Теперь, используя токен ПОЛЬЗОВАТЕЛЯ, скопируйте файл, которым вы только что поделились
  5. Удалите файл, которым учетная запись службы поделилась с пользователем.

Это все выглядит немного глупо, но ядумаю, что это единственный способ сделать это, учитывая текущие ограничения в Google Drive.Я бы ожидал, что учетной записи службы с делегированием домена можно будет просто скопировать объект, но это не так.

Если есть лучший способ, я очень рад учиться, но сейчас это, кажется, работает.

...