Google Drive V3 APi: как получить много файлов по идентификатору - PullRequest
0 голосов
/ 01 ноября 2019

Я использую Google.Apis.Drive.v3,

. Для своего приложения я храню GoogleIds файлов (поскольку имена могут измениться). Я хочу получить метаданные для файлов, чтобы получить имена, однако не существует четкого способа получить несколько файлов по идентификатору.

Я могу использовать DriveService.Files.Get("A_GOOGLE_FILE_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)

или какой-то синтаксис запроса, позволяющий найти по идентификаторам

 listRequest.Q = " id in ('aaaaa','bbbb', 'ccccc')";

Я просмотрел документацию https://developers.google.com/drive/api/v3/search-files и ничего не увидел

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вы можете получить список файлов, используя запрос, а затем отфильтровать этот список, сравнивая каждый fileID с вашим массивом folderIds:

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
            }
        }
    }
}

В «Сделайте что-нибудь» вы можете реализовать код для хранения всех файлов, с заданными идентификаторами, в одном массиве для работы с ним вне циклов.

0 голосов
/ 01 ноября 2019

на данный момент я сделал это

var tasks = new List<Task<Google.Apis.Drive.v3.Data.File>>();
foreach(var id in ids)
{
    var thing = service.Files.Get(id);
    var task = thing.ExecuteAsync();
    tasks.Add(task);
}

var files = await Task.WhenAll(tasks);

Хотя я уверен, что Google не оценит, что меня ударили несколько раз, когда это можно было сделать одновременно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...