Разбивка файлов на страницы с помощью клиентской библиотеки API Google Диска

Я хочу разбить файлы Google Drive на страницы, используя клиентскую библиотеку Google Drive API.

Я использую учетную запись службы Google Диска с ASP.Net С#. Чтобы заполнить загруженные файлы, я использую следующий код:

FilesResource.ListRequest list = service.Files.List();
list.MaxResults = 1000;
if (search != null)
{
   list.Q = search;
}

FileList filesFeed = list.Execute();
foreach (File item in filesFeed.Items)
{
  // loop the files
}

Предположим, в моем аккаунте 100 файлов.

Как я могу разбить файлы на страницы по 10 записей на каждой странице?


person Gopal Biswas    schedule 18.05.2016    source источник


Ответы (2)


Я бы порекомендовал использовать PageStreamer, вот пример использования Drive API V2.

 var pageStreamer = new PageStreamer<Google.Apis.Drive.v2.Data.File, FilesResource.ListRequest, FileList, string>(
                                                   (request, token) => request.PageToken = token,
                                                   response => response.NextPageToken,
                                                   response => response.Items);

 var req = service.Files.List();
 req.MaxResults = 1000;


foreach (var result in pageStreamer.Fetch(req))
  {
  Console.WriteLine(result.Id);
   }
person DaImTo    schedule 19.05.2016
comment
@DaImTo... PageStreamer не работает с Google.Apis.Drive.v2. Я очень сильно застрял в проблеме разбивки на страницы файлов на диске Google. - person Gopal Biswas; 19.05.2016
comment
Обновил его для Drive V2 - person DaImTo; 19.05.2016
comment
@DaImTo Как получить PageStreamer для Google Диска API V2? Я не могу найти ссылку на него. - person Atihska; 13.07.2017
comment
Это код, который вы должны использовать. Это часть клиентской библиотеки dotnet API Google. - person DaImTo; 13.07.2017
comment
@DaImTo Я использую приведенный выше код и получаю следующую ошибку компилятора: не указан аргумент, соответствующий обязательному формальному параметру «извлекатель ресурсов» для «PageStreamer‹File, FilesResource.ListRequest, FileList, string›.PageStreamer(Action‹ FilesResource.ListRequest, строка›, Func‹FileList, строка›, Func‹FileList, IEnumerable‹File››)' - person Atihska; 13.07.2017
comment
Зарегистрируйте это как проблему, возможно, у кого-то из других будет время, чтобы проверить это, у меня не будет времени в течение нескольких недель github.com/google/google-api-dotnet-client - person DaImTo; 13.07.2017

Мы можем добиться разбиения на страницы с помощью «nextPageToken». Здесь я пытаюсь объяснить ваш сценарий с помощью примера кода. Код (с использованием Java REST API v3) предназначен для получения 6-й страницы из 10 страниц, каждая из которых содержит 10 файлов.

public static FileList getPage(Drive service, int pageNumber, int pageSize) throws IOException {

    private static final int DRIVE_MAX_ITEMS_PER_PAGE = 1000;
    int skipCount = pageSize * (pageNumber - 1);

    // Skipping previous pages by requesting only next page token for light weight responce.
    Drive.Files.List list = service.files().list().setFields("nextPageToken");
    while (skipCount > 0) {
        int pageSize = 0;
        if (skipCount > DRIVE_MAX_ITEMS_PER_PAGE) {
            pageSize = DRIVE_MAX_ITEMS_PER_PAGE;
            skipCount -= DRIVE_MAX_ITEMS_PER_PAGE;
        } else {
            pageSize = skipCount;
        }
        FileList result = list.setPageSize(pageSize).execute();
        if (result.getNextPageToken() == null) {
            throw new RuntimeException(
                    "getPage Failed: Google drive does't have requested page.");
        }
        list.setPageToken(result.getNextPageToken());
    }

    // Returning requested page.
    return list.setQ(query).setFields("*").setPageSize(pageSize).execute();
}

Надеюсь, это полезно для вас.....

person Venkat    schedule 18.05.2016
comment
Спасибо за ваши усилия, но я не смог преобразовать некоторые строки кода в С#. Как результат FileList = list.setPageSize(pageSize).execute(); Свойство setPageSize не поддерживается. Я использую Google.Apis.Drive.v2, поэтому проблема с пейджингом все еще не решена. - person Gopal Biswas; 18.05.2016
comment
Вопрос о C # и клиентской библиотеке .net, зачем вам публиковать пример на Java? - person DaImTo; 19.05.2016
comment
Я просто пытался дать ему подход к решению. - person Venkat; 20.05.2016