cae*_*say 6 c# google-api google-drive-api google-api-dotnet-client
我一直在互联网上搜索几个小时,试图找出上传一个将包含在Team Drive中的文件的必要条件.
我已经阅读了大部分文档,我发现的团队驱动器中唯一有趣的部分/提及是在这里,但遗憾的是没有具体信息:https:
//developers.google.com/drive/v3/web/manage-uploads
https: //developers.google.com/drive/v3/web/manage-teamdrives
https://developers.google.com/drive/v3/web/about-files
我正在使用.Net gapi nuget包(v3).创建如下服务:
string[] scopes = new string[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile };
var secrets = new ClientSecrets
{
ClientId = "...",
ClientSecret = "...",
};
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, scopes, Environment.UserName, CancellationToken.None).Result;
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "...",
});
Run Code Online (Sandbox Code Playgroud)
我有我目标的Team Drive的ID,我可以通过以下代码成功检索TeamDrive,但这里没有有趣的方法可供上传:
var teamDrive = service.Teamdrives.Get(driveFolderId).Execute();
Run Code Online (Sandbox Code Playgroud)
我目前一直在尝试使用正常的CreateMediaUpload方式创建文件.
File body = new File();
body.Name = name;
body.MimeType = "application/octet-stream";
FilesResource.CreateMediaUpload request = service.Files.Create(body, stream, "text/plain");
request.Upload();
Run Code Online (Sandbox Code Playgroud)
有一些有趣的属性File,即Parents也是TeamDriveId.设置TeamDriveId为Team Drive Id时,文件最终位于根目录中的个人驱动器中.将父级设置为Team Drive Id时,我似乎无法在任何地方找到该文件.
没有抛出错误,结果request.Upload()表示每次都成功/完成(即使文件没有显示).我还应该在哪里设置父团队驱动器?有没有其他有趣的特性上File,DriveService或TeamDrive因此我很迷失.
除了将父级设置为团队驱动器ID之外,还必须SupportsTeamDrives在请求中将该属性设置为true.
然后代码看起来类似于以下(我注意到重要的行):
File body = new File();
body.Name = name;
body.MimeType = "application/octet-stream";
body.Parents = new List<string> { driveFolderId }; // <--------
FilesResource.CreateMediaUpload request = service.Files.Create(body, stream, "application/octet-stream");
request.SupportsTeamDrives = true; // <--------
request.Upload();
Run Code Online (Sandbox Code Playgroud)
这里的关键是Team Drives权限方案与个人驱动器权限方案完全不同,因此您需要明确选择它以证明您了解差异.
如果您想列出或搜索团队驱动器中的文件,您还必须指定IncludeTeamDriveItems并Corpora根据请求(除此之外SupportsTeamDrives)添加一些信息.
搜索可能看起来像这样
var existingSearch = service.Files.List();
existingSearch.Fields = "nextPageToken, files(id, name)";
existingSearch.Q = $"'{driveFolderId}' in parents and name = '{name}'";
if (isFolderTeamDrive)
{
existingSearch.SupportsTeamDrives = true;
existingSearch.Corpora = "teamDrive";
existingSearch.IncludeTeamDriveItems = true;
existingSearch.TeamDriveId = driveFolderId;
}
var existingResponse = existingSearch.Execute();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |