Google drive api GoogleDriveV3API:如何通过Id获取多个文件

Google drive api GoogleDriveV3API:如何通过Id获取多个文件,google-drive-api,Google Drive Api,我正在使用Google.api.Drive.v3 对于我的应用程序,我存储文件的GoogleID(因为名称可能会更改)。我想获取文件的元数据以获取名称,但是没有一种明确的方法可以通过Id获取多个文件 我可以使用DriveService.Files.Get(“A\u GOOGLE\u FILE\u ID”),它会按ID给我一个文件 我可以使用(如下)查询文件,虽然我可以按folderId搜索,但不能按fileId搜索 FilesResource.ListRequest listRequest

我正在使用Google.api.Drive.v3

对于我的应用程序,我存储文件的GoogleID(因为名称可能会更改)。我想获取文件的元数据以获取名称,但是没有一种明确的方法可以通过Id获取多个文件

我可以使用
DriveService.Files.Get(“A\u GOOGLE\u FILE\u ID”)
,它会按ID给我一个文件

我可以使用(如下)查询文件,虽然我可以按folderId搜索,但不能按fileId搜索

   FilesResource.ListRequest listRequest = service.Files.List();
   listRequest.PageSize = 500;
   listRequest.Fields = "*";


   var idQueryClause = string.Join(" or ", ids.Select(id => $" '{id}' in parents"));
   listRequest.Q = $" trashed=false and application/vnd.google-apps.folder and ({idQueryClause})";

   var result = await listRequest.ExecuteAsync();
我想我要找的是

    DriveService.Files.Get(IEnumerable<string> folderIds)

我已经阅读了文档,但在我完成这项工作的那一刻,我什么也看不见

var tasks=newlist();
foreach(id中的变量id)
{
var thing=service.Files.Get(id);
var task=thing.ExecuteAsync();
任务。添加(任务);
}
var files=wait Task.WhenAll(任务);

虽然我确信google不喜欢在一次可以完成的情况下被多次点击

,但您可以使用查询获取文件列表,然后通过将每个文件ID与您的FolderID数组进行比较来筛选该列表:

FilesResource.ListRequest listRequest = service.Files.List();
listRequest.PageSize = 500;
listRequest.Fields = "*";
//Search for untrashed folders
listRequest.Q = $" trashed=false and application/vnd.google-apps.folder";

// List files 
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute().Files;
if (files != null && files.Count > 0) {
    foreach (var file in files) {
        foreach (var fileID in folderIds) {
            if (file.Id == fileID) {
            var thing = file;
            //Do something
            }
        }
    }
}
fileresource.ListRequest ListRequest=service.Files.List();
listRequest.PageSize=500;
listRequest.Fields=“*”;
//搜索未刷新的文件夹
listRequest.Q=$“trashed=false和application/vnd.google apps.folder”;
//列出文件
IList files=listRequest.Execute().files;
if(files!=null&&files.Count>0){
foreach(文件中的var文件){
foreach(folderIds中的var fileID){
if(file.Id==fileID){
var-thing=文件;
//做点什么
}
}
}
}

在“Do something”中,您可以实现将所有文件(具有给定ID)存储在单个数组中的代码,以便在循环之外使用它。

IIRC drive api v3没有该功能。您必须编写自己的多线程/迭代函数来执行soYes,这肯定会起作用,但是我想从按Id选择文件的速度中获益,对于上面的解决方案,我可能必须选择驱动器上的所有文件夹,以过滤除少数结果外的所有结果。不过,感谢您提供了一个备选方案,因为没有操作员可以按ID进行筛选,唯一的方法是使用带有多个get请求()的批处理,这将加快进程,就像您现在所做的那样,但它仍将花费相同的Google配额。我提供的代码在配额方面是最有效的。
FilesResource.ListRequest listRequest = service.Files.List();
listRequest.PageSize = 500;
listRequest.Fields = "*";
//Search for untrashed folders
listRequest.Q = $" trashed=false and application/vnd.google-apps.folder";

// List files 
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute().Files;
if (files != null && files.Count > 0) {
    foreach (var file in files) {
        foreach (var fileID in folderIds) {
            if (file.Id == fileID) {
            var thing = file;
            //Do something
            }
        }
    }
}