Google DriveService Files.List() 未返回结果
Google DriveService Files.List() not returning results
编辑:
我已尝试授予 SA 访问我的个人驱动器(在组织工作区内)以进行一些故障排除。在向 SA 授予对特定文件夹的权限并重写代码以检查该文件夹后,它成功地 return 编辑了有关测试文件夹中文件的信息。结论是 SA 已由我们的 IT 部门正确设置,并且确实有足够的范围和权限来读取我们组织工作区中的文件。因此,问题仍然存在:为什么它不能 return 有关共享驱动器中文件的信息?还需要设置哪些其他参数才能将其传送到 return 那些文件?是否还有其他需要使用的功能?我确实注意到已弃用的 TeamDrives.List() 函数,但尝试使用它时的指导是使用 Files.List() 正如我最初写的那样。
---结束编辑---
我们有一个 Google 工作区环境。我们的 IT 部门已授予我一个服务帐户 (SA),我正在尝试使用它来帮助维护访问权限。 SA 已被授予对共享驱动器实例的内容管理员权限。
我尝试按照 this YouTube 教程进行操作。在逐步执行代码时,它似乎可以正确登录,但没有 returning 任何文件。我已经尝试用完整的 URL 替换我要检查的根文件夹的文件 ID,但是 return 是一个 404 错误,所以我认为它找到了正确的文件夹。
如果使用文件 ID,则代码运行时不会出现错误,只是 return 没有文件(并且根目录中有数百个文件夹和文件)。
有什么建议吗?
namespace DriveQuickstart
{
class 计划
{
static string[] Scopes = { DriveService.Scope.DriveReadonly };
private const string PathToServiceAccountKeyFile = @"<path to jason Service Account file>";
private const string ServiceAccountEmail = @"<Service Account "email">";
static void Main(string[] args)
{
MainAsync().Wait();
}
static async Task MainAsync()
{
var credential = GoogleCredential.FromFile(PathToServiceAccountKeyFile)
.CreateScoped(new[] { DriveService.ScopeConstants.Drive });
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential
});
var request = service.Files.List();
request.IncludeItemsFromAllDrives = true;
request.SupportsAllDrives = true;
request.Q = "parents in '<id of "root" folder in shared drive>'";
FileList results = await request.ExecuteAsync();
foreach (var driveFile in results.Files)
{
Console.WriteLine($"{driveFile.Name} {driveFile.MimeType} {driveFile.Id}");
}
}
}
}
好的,@DAIMTO 示例似乎是针对个人驱动器的。示例中的团队驱动器的 Q() 参数语法不正确。使其在团队环境中工作:
IncludeItemsFromAllDrives 参数必须设置为 true
SupportsAllDrives 参数必须设置为 true
查找特定目录的Q搜索参数语法为:
Q = "'folder_ID' 在 parents 和 mimeType = 'application/vnd.google-apps.folder'"; -- 或您选择的 mimeType
(注意: 这与 youtube 示例“parents in 'folder_ID'”相反)
编辑:
我已尝试授予 SA 访问我的个人驱动器(在组织工作区内)以进行一些故障排除。在向 SA 授予对特定文件夹的权限并重写代码以检查该文件夹后,它成功地 return 编辑了有关测试文件夹中文件的信息。结论是 SA 已由我们的 IT 部门正确设置,并且确实有足够的范围和权限来读取我们组织工作区中的文件。因此,问题仍然存在:为什么它不能 return 有关共享驱动器中文件的信息?还需要设置哪些其他参数才能将其传送到 return 那些文件?是否还有其他需要使用的功能?我确实注意到已弃用的 TeamDrives.List() 函数,但尝试使用它时的指导是使用 Files.List() 正如我最初写的那样。
---结束编辑---
我们有一个 Google 工作区环境。我们的 IT 部门已授予我一个服务帐户 (SA),我正在尝试使用它来帮助维护访问权限。 SA 已被授予对共享驱动器实例的内容管理员权限。 我尝试按照 this YouTube 教程进行操作。在逐步执行代码时,它似乎可以正确登录,但没有 returning 任何文件。我已经尝试用完整的 URL 替换我要检查的根文件夹的文件 ID,但是 return 是一个 404 错误,所以我认为它找到了正确的文件夹。 如果使用文件 ID,则代码运行时不会出现错误,只是 return 没有文件(并且根目录中有数百个文件夹和文件)。 有什么建议吗?
namespace DriveQuickstart
{ class 计划
{
static string[] Scopes = { DriveService.Scope.DriveReadonly };
private const string PathToServiceAccountKeyFile = @"<path to jason Service Account file>";
private const string ServiceAccountEmail = @"<Service Account "email">";
static void Main(string[] args)
{
MainAsync().Wait();
}
static async Task MainAsync()
{
var credential = GoogleCredential.FromFile(PathToServiceAccountKeyFile)
.CreateScoped(new[] { DriveService.ScopeConstants.Drive });
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential
});
var request = service.Files.List();
request.IncludeItemsFromAllDrives = true;
request.SupportsAllDrives = true;
request.Q = "parents in '<id of "root" folder in shared drive>'";
FileList results = await request.ExecuteAsync();
foreach (var driveFile in results.Files)
{
Console.WriteLine($"{driveFile.Name} {driveFile.MimeType} {driveFile.Id}");
}
}
}
}
好的,@DAIMTO 示例似乎是针对个人驱动器的。示例中的团队驱动器的 Q() 参数语法不正确。使其在团队环境中工作:
IncludeItemsFromAllDrives 参数必须设置为 true
SupportsAllDrives 参数必须设置为 true
查找特定目录的Q搜索参数语法为:
Q = "'folder_ID' 在 parents 和 mimeType = 'application/vnd.google-apps.folder'"; -- 或您选择的 mimeType
(注意: 这与 youtube 示例“parents in 'folder_ID'”相反)