Копирование Google Диска, Team Drive (Сервис) на Мой диск (Пользователь)

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

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

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

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

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

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

1 ответ

Решение

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

  1. Получить root-аккаунт СЕРВИСА, используя:

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

    • Удалить командный диск
    • установить родительский идентификатор для корневого идентификатора службы. Это удаляет его из командного диска, так что вы действительно можете что-то с ним сделать.
  3. Предоставить общий доступ к файлу пользователю с правами "писателя" (это устраняет любые проблемы с доменом)
  4. Теперь, используя токен USER'S, скопируйте файл, которым вы только что поделились
  5. Удалите файл, которым учетная запись службы поделилась с пользователем.

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

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

Другие вопросы по тегам