在 Google 云端硬盘 API v3 中的同一批处理请求中复制文件并添加权限



我有以下代码,我想使用batch.在此代码中,首先创建文件的副本,然后使用新文件的id添加权限。

File readOnlyFile = new File();
readOnlyFile.Name = newFileName.Replace(' ', '-') + "_assess";
readOnlyFile.Parents = new List<string> { targetFolderId };
FilesResource.CopyRequest fileCreateRequest = _driveService.Files.Copy(readOnlyFile, fileId);
string readOnlyFileId = fileCreateRequest.Execute().Id;
if (readOnlyFileId != null)
{
newPermission.ExpirationTime = expirationDate;
newPermission.Type = "anyone";
newPermission.Role = "reader";
PermissionsResource.CreateRequest req = _driveService.Permissions.Create(newPermission, readOnlyFileId);
req.SendNotificationEmail = false;
req.Execute();
}

但是,在尝试将batch用于此任务时,我感到困惑,因为我需要新复制的文件的 id 来添加权限。以下是我最初的尝试,我不知道batch.Queue(fileCreateRequest, callback)后如何进行.我可以向批处理添加新操作以添加权限。但是,我不知道如何获取文件的id。有什么建议吗?我需要为三个不同的文件执行此操作。

var batch = new BatchRequest(_driveService);
BatchRequest.OnResponse<Permission> callback = delegate (
Permission permission,
RequestError error,
int index,
System.Net.Http.HttpResponseMessage message)
{
if (error != null)
{
// Handle error
Console.WriteLine(error.Message);
}
else
{
Console.WriteLine("Permission ID: " + permission.Id);
}
};

Permission newPermission = new Permission();
File readOnlyFile = new File();
readOnlyFile.Name = newFileName.Replace(' ', '-') + "_assess";
readOnlyFile.Parents = new List<string> { targetFolderId };
FilesResource.CopyRequest fileCreateRequest = _driveService.Files.Copy(readOnlyFile, fileId);
batch.Queue(fileCreateRequest, callback);

上传文件和配置文件的权限是两个不同的操作,不能一起批处理。您的方法是正确的,您只需在第二次调用中使用设置权限。

上传文件并像您一样检索 ID 后,您必须创建第二个调用来创建权限。

没有办法在单个请求中执行此操作,因为要设置权限,您需要文件的 id;并且只有在完成上传后才会创建。如果您需要更多澄清,请毫不犹豫地问我。

最新更新