首页  >  问答  >  正文

使用不同请求时 Google Drive PHP API 分页不起作用

我在 Laravel (v9.0) 项目中使用 Google Drive PHP API。关于分页,我希望有以下流程:

  1. 获取文件第一页并返回给前端;
  2. 当用户滚动到页面底部时,前端请求下一页文件;
  3. 后端接收请求并从 Google Drive API 获取相应的页面。

我面临的问题是,当前端请求下一页时(在下面的示例中,pageToken 具有之前 Google Drive 调用中的 nextPageToken 值) ,Google 将引发错误:代码:400,消息:无效值,位置:pageToken。下面是我正在使用的代码:

$pageToken = request()->input('pageToken');

$optParams = [
    'q' => '' . $parentQuery,
    'pageSize' => $paginateSize,
    'fields' => 'nextPageToken, files(id, name, parents)',
];

if ($pageToken) {
    $optParams['pageToken'] = $pageToken;
}

$response = $this->service->files->listFiles($optParams);

但是,如果我在返回后端之前获取所有页面,它似乎可以工作:

$optParams = [
    'q' => '' . $parentQuery,
    'pageSize' => $paginateSize,
    'fields' => 'nextPageToken, files(id, name, parents)',
];

$files = [];

do {
    $results = $this->service->files->listFiles($optParams);

    $files = array_merge($files, $results->getFiles());

    $pageToken = $results->getNextPageToken();

    if ($pageToken) {
        $optParams['pageToken'] = $pageToken;
    }

} while ($pageToken);

我可能误解了 Google Drive API 中分页的使用方式,但是有没有一种方法可以像我的第一个示例中那样对内容进行分页?

P粉993712159P粉993712159432 天前523

全部回复(1)我来回复

  • P粉546138344

    P粉5461383442023-09-07 11:36:00

    使用 issetempty 函数检查 pageToken 值是否有效

    $pageToken = request()->input('pageToken');
    
    $optParams = [
        'q' => '' . $parentQuery,
        'pageSize' => $paginateSize,
        'fields' => 'nextPageToken, files(id, name, parents)',
    ];
    
    if (isset($pageToken) && !empty($pageToken)) {
        $optParams['pageToken'] = $pageToken;
    }
    
    $response = $this->service->files->listFiles($optParams);

    回复
    0
  • 取消回复