当前位置: 首页 > 知识库问答 >
问题:

使用服务帐户C将文件上传到Google Drive#

上官季
2023-03-14

我正在构建一个功能,将文件从我的web应用程序上传到我的客户google drive。我不希望应用程序对用户进行身份验证。谁曾经上传过我文件中的任何文件?我想上传到我客户的谷歌硬盘。

我假设服务帐户是用于此目的的帐户。我说得对吗?

当我使用以下代码上传文件时,它会成功上传,但在“我的驱动器”下不可见。然后我添加了一个权限,基本上与我的gmail帐户共享该文件。然后它在“与我共享”部分可见。

我希望这些文件像普通文件一样在“我的驱动器”部分可用。

有人能指出我做错了什么吗?

 private DriveService GetServiceInstance()
{
    try
    {
        var certificate = new X509Certificate2(Server.MapPath("path to .p12 key"), "notasecret", X509KeyStorageFlags.Exportable);

        string[] scopes = new string[] {
            DriveService.Scope.Drive, 
            DriveService.Scope.DriveFile,
            DriveService.Scope.DriveAppdata,
            DriveService.Scope.DriveMetadata
    };

        var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("Client Email")
        {
            Scopes = scopes
        }.FromCertificate(certificate));
        // Create the service.
        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Drive API Sample",
        });

        return service;
    }
    catch (Exception ex)
    {

        throw;
    }
}

protected void btnSave_Click(object sender, EventArgs e)
    {
        try
        {
            if (fu.HasFile)
            {
                DriveService service = GetServiceInstance();
                Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
                body.Title = fu.FileName;
                body.MimeType = fu.PostedFile.ContentType;

                FilesResource.InsertMediaUpload request = service.Files.Insert(body, fu.PostedFile.InputStream, fu.PostedFile.ContentType);
                request.Upload();

// I want to eliminate this part. where i do not have to give permission. As i want these files to get stored on same google drive account for which i have generated this service account and client keys    





 Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
                    Google.Apis.Drive.v2.Data.Permission newPermission = new Google.Apis.Drive.v2.Data.Permission();
                    newPermission.Value = "my email address";
                    newPermission.Type = "user";
                    newPermission.Role = "writer";

                    Google.Apis.Drive.v2.PermissionsResource.InsertRequest insertRequest = service.Permissions.Insert(newPermission, file.Id);
                    insertRequest.SendNotificationEmails = false;
                    insertRequest.Execute();
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }

共有2个答案

唐兴贤
2023-03-14

我已经创建了一个特定的文件夹,并将该文件夹共享到我的电子邮件地址。已将文档上载到该文件夹。这解决了我的问题。

施永宁
2023-03-14

不要使用服务帐户。在服务器中嵌入目标账号的刷新令牌。请参阅如何在没有用户干预的情况下授权应用(Web或已安装)?(规范?)

 类似资料:
  • 我想上传文件到我的谷歌驱动器使用谷歌服务号凭据。 我从谷歌开发者控制台下载了一个JSON文件作为凭证,并从中获得了凭证。 这是我的代码片段。 代码运行,没有错误,但是我找不到上传到我的Google Drive帐户的文件。我不知道为什么文件没有上传。你愿意帮我解决这个问题吗?

  • 是否可以使用server1将文件上传到server2? 访客请访问:我的网站。com(server1) 然后他将一个文件上传到server1,server1会自动将该文件上传到server2?? 或者简单地说,用户可以使用server1作为代理将文件上传到server2,因为server2只能从server1访问 会有帮助吗,还是有其他更好的解决方案?

  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 问题内容: 我已创建代码以使用Java中的服务帐户将文件插入到Google驱动器中。文件已上传到Google驱动器中,但我无法使用网络浏览器看到它。当我使用代码检查文件时,我可以检索上载的文件。我的问题是我将文件上传到Google驱动器,可以使用Java中的Google Services帐户通过网络浏览器查看文件 请在下面找到示例代码。 问题答案: 如果您设置了文件权限,则可以在常规的gmail帐

  • 我已经创建了代码,使用java中的服务帐户将文件插入到google drive。文件已上传至google drive,但我无法使用网络浏览器查看。当我使用代码检查文件时,我可以检索上传的文件。我的问题是,如何使用java中的google services帐户将文件上传到google drive,以便通过网络浏览器查看 请在下面找到示例代码。

  • 我有一个将文件上传到服务器的api。我需要让iphone成为一个将文件从dropbox传输到服务器的应用程序。 我的问题是,我是否需要将文件从dropbox/box帐户下载到iphone,然后使用api上传到我的服务器? 或者我可以跳过将文件下载到设备并直接从dropbox/box帐户上传到自定义服务器的过程吗? 或者可以选择在iphone和dropbox之间只同步少数文件,然后将文件的本地副本上