using Google.Apis.Auth.OAuth2; using Google.Apis.Auth.OAuth2.Flows; using Google.Apis.Auth.OAuth2.Responses; using Google.Apis.Drive.v3; using Google.Apis.Services; using Google.Apis.Util.Store; using Google.Apis.Drive.v3.Data; using System.IO; using System.Collections.Generic; // usage example at the very bottom namespace ConsoleApp1 { public class GoogleDriveFilesService { private static DriveService GetService() { // ключи для почты asbautodrilling@gmail.com. var tokenResponse = new TokenResponse { AccessToken = "ya29.a0ARrdaM-lM7q0TIC_DXixR4oW63QUftjSPHl-8nIdvZwtqA8Z1bXtlYpDrQXj9UFTjW8FW8uqPMrdamUSp4kO4a9JX7FddkBWxaJ_omSJpqzDfnHTHA_7-zGMUohaAsmPLsQtFz_GUmB5ZoVLmA8xWdbJxVxU", RefreshToken = "1//04FeDguc19IfgCgYIARAAGAQSNwF-L9Ir8U7wX2seanUzsxXXGgFzOYQqjbtN9O27ZZybbOobZjVAo_4_eFNLMX1ElPKOFVWsrJQ" }; var applicationName = "Files"; // Use the name of the project in Google Cloud var username = "asbautodrilling@gmail.com"; // Use your email var apiCodeFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = new ClientSecrets { ClientId = "1020584579240-f7amqg35qg7j94ta1ntgitajq27cgh49.apps.googleusercontent.com", ClientSecret = "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" }, Scopes = new[] {DriveService.Scope.Drive}, DataStore = new FileDataStore(applicationName) }); var credential = new UserCredential(apiCodeFlow, username, tokenResponse); var service = new DriveService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = applicationName }); return service; } //public string CreateFolder(string parent, string folderName) public string CreateFolder(string folderName) // Это fileName. У гугла почему-то все называется folder: и папка, и файл. { // С parent почему-то не дружит, выкидывает Exception. var service = GetService(); var driveFolder = new Google.Apis.Drive.v3.Data.File(); driveFolder.Name = folderName; driveFolder.MimeType = "application/vnd.google-apps.folder"; //driveFolder.Parents = new string[] { parent }; var command = service.Files.Create(driveFolder); var file = command.Execute(); return file.Id; } //public string UploadFile(Stream file, string fileName, string fileMime, string folder, string fileDescription) public string UploadFile(Stream file, string fileName, string fileMime, string fileDescription) { DriveService service = GetService(); var driveFile = new Google.Apis.Drive.v3.Data.File(); driveFile.Name = fileName; driveFile.Description = fileDescription; driveFile.MimeType = fileMime; //driveFile.Parents = new [] {folder}; var request = service.Files.Create(driveFile, file, fileMime); request.Fields = "id"; var response = request.Upload(); if (response.Status != Google.Apis.Upload.UploadStatus.Completed) throw response.Exception; return request.ResponseBody.Id; } //public IEnumerable GetFiles(string folder) public IEnumerable GetFiles() { var service = GetService(); var fileList = service.Files.List(); // Это выражение ниже тоже чот не работает, выкидывает Exception. Без них выгружаются все файлы и // папки водин список. //fileList.Q =$"mimeType!='application/vnd.google-apps.folder' and '{folder}' in parents"; //fileList.Fields = "nextPageToken, files(id, name, size, mimeType)"; var result = new List(); string pageToken = null; do { fileList.PageToken = pageToken; var filesResult = fileList.Execute(); var files = filesResult.Files; pageToken = filesResult.NextPageToken; result.AddRange(files); } while (pageToken != null); return result; } public void DeleteFile(string fileId) { var service = GetService(); var command = service.Files.Delete(fileId); var result = command.Execute(); } } } // usage example: // var service = new GoogleDriveFilesService(); // // var files = service.GetFiles(); // Console.WriteLine(files); // // var newFolderId = service.CreateFolder("testText.txt"); // Console.WriteLine(newFolderId); // // var path = "/home/vladimir/TestUploadFile.txt"; // var fileInfo = new FileInfo(path); // var fileStream = File.Open(path, FileMode.Open); // var uploadedFileId = service.UploadFile(fileStream, fileInfo.Name, "", "uploaded"); // Console.WriteLine(uploadedFileId);