public static async Task UploadFileAsync(string file, string parent) { // If modifying these scopes, delete your previously saved credentials // at ~/.credentials/drive-dotnet-quickstart.json string[] Scopes = { DriveService.Scope.Drive }; const string ApplicationName = "Google Drive Uploader"; UserCredential credential; using (var stream = new FileStream(Config.Get("Google.JSON"), FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None); } // Create Drive API service. using (var service = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, })) { // Define parameters of request. var fileName = Path.GetFileName(file); var mimeType = MimeMapping.GetMimeMapping(file); var id = service.FindIdByNameAndMimeType(fileName, mimeType, parent); if (id.IsNullOrEmpty()) { var body = new Google.Apis.Drive.v3.Data.File { Name = fileName, MimeType = mimeType, Description = string.Format("Last backuped at: {0}", DateTime.Now), Parents = new List <string>() { parent }, }; using (var fileStream = new FileStream(file, FileMode.Open)) { var request = service.Files.Create(body, fileStream, mimeType); request.Upload(); } } else { var body = new Google.Apis.Drive.v3.Data.File(); using (var fileStream = new FileStream(file, FileMode.Open)) { var request = service.Files.Update(body, id, fileStream, mimeType); request.Upload(); } } } }