问题是您真的不需要递归地执行此操作。你可以,但这意味着更多的请求。
如果您使用 nextpage 令牌执行标准 file.list,您将对驱动器帐户中的每 10000 个文件发出请求。将所有响应存储到应用程序中的单个变量中。然后在本地你可以对 parent 上的东西进行排序以找到文件夹并将它们整理出来。
这意味着一个初始请求,然后是对您云端硬盘帐户中每 10000 个文件的请求。因此,如果您的驱动器中有 15000 个文件,那么您正在查看对 api 的三个请求。
如果您真的想递归地执行此操作,如果您有一个包含超过 10000 个文件的目录,您将对系统中的每个目录以及任何下一页令牌请求 api。
因此,如果您有 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'