C# 在C中验证并上传到各种Google Drive帐户

C# 在C中验证并上传到各种Google Drive帐户,c#,winforms,google-drive-api,C#,Winforms,Google Drive Api,我正在Visual Studio 2013中尝试创建一个Winforms应用程序来连接到Google Drive 我下载了Nuget软件包,并使用Google开发者页面上的示例代码创建了一个测试项目,它运行正常!我必须去创造我的秘密和钥匙等,一切都进行得很顺利 它把我的测试文本文件上传到我的谷歌硬盘账号。伟大的 当然,在最初的上传过程中,身份验证打开了一个浏览器窗口,在那里我必须授予我的应用程序访问Google Drive的权限,所有这些都很好 然而,我想能够上传测试文件到不同的谷歌驱动器帐户。

我正在Visual Studio 2013中尝试创建一个Winforms应用程序来连接到Google Drive

我下载了Nuget软件包,并使用Google开发者页面上的示例代码创建了一个测试项目,它运行正常!我必须去创造我的秘密和钥匙等,一切都进行得很顺利

它把我的测试文本文件上传到我的谷歌硬盘账号。伟大的 当然,在最初的上传过程中,身份验证打开了一个浏览器窗口,在那里我必须授予我的应用程序访问Google Drive的权限,所有这些都很好

然而,我想能够上传测试文件到不同的谷歌驱动器帐户。然而,不管我做什么,这个测试代码只会上传到我的默认谷歌驱动器帐户,这是我从我的电脑访问的三个帐户之一。 我试着在我的浏览器中打开Google Drive,注销我的主帐户,登录到另一个帐户,当浏览器打开运行我的测试代码时。。。但它仍然坚持只上传到我相同的默认谷歌硬盘

如何使用代码“选择”要登录的Google Drive帐户

我知道这是关于连接到“已验证的帐户”,但我在我的电脑上使用不同的Google Drive帐户进行验证,这没有什么区别

下面是我的测试代码示例。有人能解释一下吗

在下面示例的第8行,我初始化了凭据,我想如果我用我想要的目标Google Drive帐户的电子邮件地址替换用户字符串,它会上传到该帐户,但它不在乎我在这里输入了什么

UserCredential credential;

        using (var filestream = new FileStream("client_secrets.json",
            FileMode.Open, FileAccess.Read))
        {
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(filestream).Secrets,
                new[] { DriveService.Scope.Drive },
                "user",
                CancellationToken.None,
                new FileDataStore("DriveCommandLineSample")).Result;
        }

        // Create the service.
        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "BackupApp",
        });

        Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
        body.Title = "My document 4";
        body.Description = "A test document 4";
        body.MimeType = "text/plain";

        byte[] byteArray = System.IO.File.ReadAllBytes("document4.txt");
        System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

        FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
        request.Upload();

        Google.Apis.Drive.v2.Data.File file = request.ResponseBody;

我已经有几年没有这样做了,但我认为删除client_secrets.json文件会触发重新身份验证。谢谢,但是client_secrets.json文件是我的应用程序凭据,用于通过Google服务器进行身份验证,而不是用户凭据?教程中这个示例代码的部分设置是从谷歌下载client_secrets文件,并确保它位于您的代码文件夹中。另外,删除那个文件会导致这个文件流抛出一个异常?好吧,所以我最终自己解决了!库将安全令牌存储在json文件中的位置:%AppData%\Roaming\DriveCommandLineSample,用于上面的示例代码。一旦您进行了一次身份验证,它将永远不再使用此令牌再次进行身份验证。更改系统登录的驱动器用户的唯一方法是进入并删除、重命名或移动此位置的json令牌文件!那你就这样。。。。它只是在绝望中显示,如果你用谷歌搜索足够多,答案就会出现