Как просмотреть общий диск Google из учетной записи службы Интернета и API 3.0C#

Место общения программистов C#
Ответить
Anonymous
 Как просмотреть общий диск Google из учетной записи службы Интернета и API 3.0

Сообщение Anonymous »

Я хочу, чтобы мое консольное приложение C# могло загружать файлы с помощью учетной записи службы на общий диск Google, а также загружать/удалять эти файлы при входе в веб-интерфейс Google под моей личной учетной записью. Насколько я понимаю, учетная запись oauth не требуется, и я могу сделать это только с помощью служебной учетной записи.
На данный момент у меня есть:
  • Создал API Google Диска и служебный аккаунт.
  • Создал общий диск Google и назначил свой служебный аккаунт «менеджером».
Консольное приложение может загружать файлы и получать список загруженных файлов, но не может видеть общую папку или файлы, к которым предоставлен доступ к электронной почте сервисного аккаунта.Общий диск Google и разрешения
Делегирование всего домена Google
Это позволит успешно получить службу Google Drive, но я думаю, что проблема может быть в олицетворении/делегировании.

Код: Выделить всё

        private DriveService GetDriveService()
{
// Load the Service Account JSON key file
string rootDirectory = Environment.CurrentDirectory;
string keyFilePath = rootDirectory + "\\mykey.json";

ServiceAccountCredential? credential;

using (var stream = new FileStream(keyFilePath, FileMode.Open, FileAccess.Read))
{
credential = GoogleCredential.FromStream(stream)
.CreateScoped(DriveService.Scope.Drive)
.CreateWithUser("me@domain.com") // Specifying the user to impersonate
.UnderlyingCredential as ServiceAccountCredential;
}

// Specify the scopes required
var scopes = new[] { DriveService.Scope.DriveFile };

// Create a delegated credential
if (credential == null) throw new ArgumentNullException(nameof(credential));

var delegatedCredential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(credential.Id)
{
Key = credential.Key,
Scopes = scopes
});

// Create the Drive service
var driveService = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = delegatedCredential,
ApplicationName = "ServerTools"
});

return driveService;
}
Этот код успешно получит список файлов, которые были загружены консольным приложением, но не отображаются в веб-интерфейсе.

Код: Выделить всё

        public List GetFileList()
{
var request = _driveService.Files.List();
request.Fields = "nextPageToken, files(id, name)";

var files = request.Execute().Files;

return files.Select(x => x.Name).ToList();
}
Этот код не вернет ни одной папки, даже если общий диск создан и сервисный аккаунт является управляющим

Код: Выделить всё

        private List? GetFolders()
{
FilesResource.ListRequest listRequest = _driveService.Files.List();
listRequest.Q = "mimeType='application/vnd.google-apps.folder'";
listRequest.Fields = "nextPageToken, files(id, name)";

// List files.
IList files = listRequest.Execute().Files;

return files.Select(x => x.Name).ToList();

}
Это похоже на проблему с конфигурацией, но мне негде искать. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ce-account
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»