Как аутентифицировать GoogleDrive Api V3 с помощью Windows Service C#? - PullRequest
0 голосов
/ 17 июня 2020

Есть ли способ аутентификации и автоматической загрузки файла c в драйвер Google с помощью службы windows? Я использую этот код для загрузки файла в настольное приложение и работаю, но не работаю в windows сервисе

этот класс может загружать, создавать, получать детали файла, аутентифицировать, проверять, существует ли каталог в настольном приложении, но в сервисном приложении нет работает и получил эту ошибку

Произошла одна или несколько ошибок. в System.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) в System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Task.Wait () * 100 * 100 * SepandAutoBackup.SepandAutoBackup.d__9.MoveNext () в C: \ SepandAuto.cs: строка 361

 class GoogleDrive_Cls
    {

    public DriveService Authenticate()
    {
        string[] scopes = new string[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile };
        var clientId = "xxxxxx.googleusercontent.com";
        var clientSecret = "zzzzzz";

        ClientSecrets cs =( new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret });
        var credential =  
                GoogleWebAuthorizationBroker
                    .AuthorizeAsync(cs, scopes, "Sepand", CancellationToken.None).Result;

         DriveService service  = new DriveService
            (new BaseClientService.Initializer()
                { HttpClientInitializer = credential, ApplicationName = "z" });

        return service;
    }



    public File CreateDirectory(DriveService _service, string _name, string _desc, string _parent)
    {
        File newDirectory = null;
        File body = new File();
        body.Name = _name;
        body.Description = _desc;
        body.MimeType = "application/vnd.google-apps.folder";
        FilesResource.CreateRequest request = _service.Files.Create(body);
        newDirectory = request.Execute();
        return newDirectory;
    }

    public  File UploadFile(DriveService _service, string _uploadFile, string _parent)
    {
        if (System.IO.File.Exists(_uploadFile))
        {
            File body = new File();

            FilesResource.ListRequest request = _service.Files.List();
            FileList f = request.Execute();
            string parent = "";
            for (int i = 0; i < f.Files.Count; i++)
            {
                if (f.Files[i].Name == _parent)
                    parent = f.Files[i].Id;
            }
            body.Name = System.IO.Path.GetFileName(_uploadFile);
            body.Description = "SepandAutoBackup";
            body.MimeType = "application/vnd.google-apps.unknown";
            body.Parents = new List<string>() { parent };
            Stream stream = new System.IO.FileStream(_uploadFile, FileMode.Open);

            FilesResource.CreateMediaUpload requset =
                new FilesResource.CreateMediaUpload(_service, body, stream, "");
            requset.Upload();
            return requset.ResponseBody;
        }
        else return null;
    }

    public bool DicetoryExists(DriveService _service, string _directoryName)
    {

        FilesResource.ListRequest request = _service.Files.List();
        FileList files = request.Execute();
        string parent = "";
        for (int i = 0; i < files.Files.Count; i++)
        {
            if (files.Files[i].Name == _directoryName)
                return true;
        }

        return false;
    }

    public GoogleFile GetFileDetails(DriveService _service, string _fileName)
    {
        GoogleFile values = new GoogleFile();
        FilesResource.ListRequest request = _service.Files.List();
        request.Fields = "files(id,name, webViewLink, size)";
        var files = request.Execute().Files;
        if (files.Count > 0 && files != null)
        {
            foreach (var file in files)
            {
                if (file.Name == _fileName)
                {
                    values.Id = file.Id;
                    values.Name = file.Name;
                    values.WebLink = file.WebViewLink;
                    values.Size = file.Size;
                }
            }
        }
        return values;
    }

    public struct GoogleFile
    {
        public string Id;
        public string Name;
        public string WebLink;
        public long? Size;
    }
}
...