Google云端硬盘服务帐户配额限制

时间:2018-06-25 22:25:38

标签: c# google-drive-api google-authentication service-accounts quota

我正在将C#WinForms(最终是Windows Service)中的大磁盘映像文件上传到我的云端硬盘中的文件夹中,并且当前正在使用Google Service帐户来这样做。

我的个人云端硬盘订阅量为2TB,但是,大文件(> 15GB,即ServiceAccount配额)的上传完成后,由于ServiceAccount与我的个人帐户没有相同的配额,因此引发了异常。

  1. 如何进行身份验证,然后使用我的个人帐户而不是服务帐户上载文件?这将取消配额限制。

    OR

  2. 我可以对要上传的文件设置权限,以免出现配额错误吗?

2 个答案:

答案 0 :(得分:0)

Dalmto编写了有关如何使用C#上传到Drive API的教程:

Google Drive API with C# .net – Upload

if (System.IO.File.Exists(_uploadFile))
            {
                File body = new File();
                body.Title = System.IO.Path.GetFileName(_uploadFile);
                body.Description = "File uploaded by Diamto Drive Sample";
                body.MimeType = GetMimeType(_uploadFile);
                body.Parents = new List() { new ParentReference() { Id = _parent } };

                // File's content.
                byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile);
                System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
                try
                {
                    FilesResource.InsertMediaUpload request = _service.Files.Insert(body, stream, GetMimeType(_uploadFile));
                    request.Upload();
                    return request.ResponseBody;
                }
                catch (Exception e)
                {
                    Console.WriteLine("An error occurred: " + e.Message);
                    return null;
                }
            }
            else {
                Console.WriteLine("File does not exist: " + _uploadFile);
                return null;
            }

注意建议不要将服务帐户用于处理大量数据,无论是下载/上传。

答案 1 :(得分:0)

解决方案是使用OAuth,并通过浏览器对用户进行身份验证。

UserCredential credential;

    using (var stream =
        new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.Personal);
        credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Console.WriteLine("Credential file saved to: " + credPath);
    }