在谷歌驱动器API中,有没有一种方法可以递归地循环所有子文件夹



在google drive API中,是否有一种递归循环所有子文件夹的方法(它应该包括子文件夹、子文件夹的子文件夹等(。此外,如果我碰巧找到了所有的文件夹ID,并在这些文件夹中找到了所有具有特定文件名的文件,那么什么是好的、合适的解决方案?-我已经尝试过"在父母或",但不起作用。-我知道我必须在q中使用name=。

谢谢。

问题是,您真的不需要递归地执行此操作。你可以,但这将意味着更多的请求。

如果您使用nextpage令牌执行标准file.list,您将对驱动器帐户中的每10000个文件发出请求。将所有响应存储到应用程序中的单个变量中。然后,您可以在本地对父级上的内容进行排序,以找到文件夹并进行排序。

这意味着一个初始请求,然后是驱动器帐户上每10000个文件的请求。所以,若驱动器中有15000个文件,那个么您将看到对api的三个请求。

如果你真的想递归地执行,你会对系统中的每个目录都有一个api请求,如果你有一个超过10000个文件的目录,再加上任何下一页标记。

因此,如果你有25个文件夹中有文件,你会看到至少25个对api的请求。

我不久前在C#中做过这件事,它有效,但它会吃掉你的配额。

public static Google.Apis.Drive.v3.Data.FileList ListAll(DriveService service, FilesListOptionalParms optional = null)
{
try
{
// Initial validation.
if (service == null)
throw new ArgumentNullException("service");
// Building the initial request.
var request = service.Files.List();
// Applying optional parameters to the request.
request = (FilesResource.ListRequest)SampleHelpers.ApplyOptionalParms(request, optional);
var pageStreamer = new Google.Apis.Requests.PageStreamer<Google.Apis.Drive.v3.Data.File, FilesResource.ListRequest, Google.Apis.Drive.v3.Data.FileList, string>(
(req, token) => request.PageToken = token,
response => response.NextPageToken,
response => response.Files);
var allFiles = new Google.Apis.Drive.v3.Data.FileList();
allFiles.Files = new List<Google.Apis.Drive.v3.Data.File>();
foreach (var result in pageStreamer.Fetch(request))
{
allFiles.Files.Add(result);
}
return allFiles;
}
catch (Exception Ex)
{
throw new Exception("Request Files.List failed.", Ex);
}
}

尖端

如果文件mime类型为application/vnd.google-apps.file,则它是一个文件夹。从中获取id并使用。

q = parents in 'Id here'

最新更新