【发布时间】:2022-10-06 04:46:07
【问题描述】:
我正在尝试使用 Google Drive API 创建文件的副本,然后使用 Docs API 进行查找和替换。除了问题是新创建的文件归我在https://console.cloud.google.com/ 帐户中创建的服务帐户所有之外,我已经能够让它全部工作。这是我所拥有的:
internal class DriveHelper
{
public DriveService Service { get; set; }
const string APPLICATION_NAME = \"sound-booth-scheduler\";
static readonly string[] Scopes = { DriveService.Scope.Drive };
internal DriveHelper()
{
InitializeService();
}
private void InitializeService()
{
var credential = GetCredentialsFromFile();
Service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = APPLICATION_NAME
});
}
private GoogleCredential GetCredentialsFromFile()
{
GoogleCredential credential;
using var stream = new FileStream(\"client_secrets.json\", FileMode.Open, FileAccess.Read);
credential = GoogleCredential.FromStream(stream).CreateScoped(Scopes);
return credential;
}
}
DriveHelper driveHelper = new DriveHelper();
var templateFileRequest = driveHelper.Service.Files.Get(\"<file id>\");
templateFileRequest.Fields = \"owners, parents\";
var templateFile = templateFileRequest.Execute();
var copyRequest = driveHelper.Service.Files.Copy(new File(), \"<file id>\");
copyRequest.Fields = \"owners, parents, id\";
var copiedFile = copyRequest.Execute();
复制请求执行时没有任何错误,但 copiedFile 具有服务帐户的父级,因此当我在浏览器中查看我的 Google Drive 时看不到它。我尝试使用以下代码设置父级,但会导致错误:
var updateRequest = driveHelper.Service.Files.Update(new File(), copiedFile.Id);
updateRequest.AddParents = templateFile.Parents.First();
updateRequest.RemoveParents = String.Join(\",\", copiedFile.Parents);
var updatedCopiedFile = updateRequest.Execute();
如何使用 API 制作文件副本并将我的用户帐户(拥有服务帐户的人)设置为文档的所有者?
-
如果这回答了您的问题,请单击左侧的接受按钮(复选图标)。通过这样做,社区中可能与您有同样担忧的其他人将知道他们的问题可以得到解决。如果您无法使用接受按钮,请随时告诉我。如何接受答案stackoverflow.com/help/accepted-answer
标签: c# .net-core google-api google-drive-api