使用 c# 在共享驱动器中复制 google doc 文件

Posted

技术标签:

【中文标题】使用 c# 在共享驱动器中复制 google doc 文件【英文标题】:copying google doc file in shared drive using c# 【发布时间】:2020-10-27 20:32:09 【问题描述】:

一段时间以来,我们一直在使用 google drive 来选择我们的一名员工拥有的现有文档,将其复制,然后将数据合并到占位符字段中,然后下载该文档的 pdf 版本。除了现在其他员工想要访问创建的文档外,它一直运行良好。所以当我们给他们一个链接时,原来的员工必须给他们访问权限。我们希望将文档移至共享驱动器,所有员工都可以在共享驱动器中看到任何内容。从我在谷歌上可以找到的内容来看,看起来我们需要在请求中将 SupportsAllDrives 属性设置为 true。但是,我在复制基本文档时创建的任何对象上都找不到该属性。因此,我在尝试复制文件时不断从谷歌收到 404。谁能建议如何让它工作?

var secrets = new ClientSecrets

    ClientId = GoogleCredentials.accesskey,
    ClientSecret = GoogleCredentials.secretkey
;

var refreshToken = _credService.GetRefreshToken();

if (string.IsNullOrEmpty(refreshToken))

    throw new Exception("Missing google refresh token for google doc processor task.");


var token = new TokenResponse  RefreshToken = refreshToken ;

var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer

    ClientSecrets = secrets
),
"user",
token);

var docService = new DocsService(new BaseClientService.Initializer

    HttpClientInitializer = credentials,
    ApplicationName = "Contract Merge"
);

var driveService = new DriveService(new BaseClientService.Initializer

    HttpClientInitializer = credentials,
    ApplicationName = "Contract Merge"
);

var newTitle = "Agreement for " + contract.FirstName + " " + contract.LastName + " " + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "-" + DateTime.Now.Year.ToString();
var newFile = new google.Apis.Drive.v2.Data.File  Title = newTitle ;
var documentCopyFile = driveService.Files.Copy(newFile, GoogleConstants.TemplateDocId).Execute();

【问题讨论】:

【参考方案1】:

正如您在 C# 库参考中所见,supportsAllDrives 之类的可选查询参数(请参阅 API 文档中的 query parameters)由 CopyRequest class 的属性处理。

因此,在构建CopyRequest之后,但在执行它之前,您必须将属性SupportsAllDrives设置为true,如下所示:

FilesResource.CopyRequest copyRequest = driveService.Files.Copy(newFile, GoogleConstants.TemplateDocId);
copyRequest.SupportsAllDrives = true;
copyRequest.Execute();

参考:

Class FilesResource.CopyRequest

【讨论】:

以上是关于使用 c# 在共享驱动器中复制 google doc 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将某人踢出Google驱动器文件

自动从 Google 共享驱动器中删除超过 X 天的文件?

Google 云端硬盘 - 搜索共享云端硬盘

用于 Google BigQuery 的 Simba ODBC 驱动程序看不到共享数据集

如何使用 Java 中的 jcifs 将文件从 smb 共享复制到本地驱动器?

两个 Google Drive 共享驱动器之间的自动同步