Копирование 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 ответ
Итак, я нашел способ, который работает для моей реализации. У меня есть токен доступа / обновления целевого пользовательского диска. Если у вас этого нет, я не уверен, как вы могли бы заставить это работать. Шаги следующие:
Получить root-аккаунт СЕРВИСА, используя:
String serviceRootId = this.serviceManager.drive().files().get( "root" ).setFields( "id" ).execute().getId();
Используйте сервисную учетную запись для копирования файла
- Удалить командный диск
- установить родительский идентификатор для корневого идентификатора службы. Это удаляет его из командного диска, так что вы действительно можете что-то с ним сделать.
- Предоставить общий доступ к файлу пользователю с правами "писателя" (это устраняет любые проблемы с доменом)
- Теперь, используя токен USER'S, скопируйте файл, которым вы только что поделились
- Удалите файл, которым учетная запись службы поделилась с пользователем.
Все это кажется немного глупым, но я думаю, что это единственный способ сделать это, учитывая текущие ограничения в Google Drive. Я бы ожидал, что учетной записи службы с делегированием домена можно будет просто скопировать объект, но это не так.
Если есть лучший способ для этого, я очень рад учиться, но сейчас это, кажется, работает.