0

我有这段代码运行并从我的驱动器中获取图像。但是,每次运行此代码时,我都会遇到问题。你能告诉我这个谷歌驱动器API调用函数在PHP中有什么问题

function listF() { 

    $result = array(); 
    $tok = array(); 
    $nextPageToken = NULL; 
    do { 
    try { 
     $parameters = array(); 
     if ($nextPageToken) { 
     $parameters['pageToken'] = $nextPageToken; 
     $parameters['q'] = "mimeType='image/jpeg' or mimeType='image/png'"; 
     } 
     $files = $this->service->files->listFiles($parameters); 
     $tok[] = $nextPageToken; 
     $result = array_merge($tok, $result, $files->getFiles()); 
     $nextPageToken = $files->getNextPageToken(); 
    } catch (Exception $e) { 
     print "An error occurred: " . $e->getMessage(); 
     $nextPageToken = NULL; 
    } 
    } while ($nextPageToken); 
    return $result; 
} 

我得到这个错误:

An error occurred: { 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "invalid", 
    "message": "Invalid Value", 
    "locationType": "parameter", 
    "location": "pageToken" 
    } 
    ], 
    "code": 400, 
    "message": "Invalid Value" 
} 
} 

它并没有真正似乎变得不合法我。也许你可能会发现错误。谢谢

+0

'“location”:“pageToken”' - 听起来像'pageToken'是带有无效值的参数。你有没有检查相应的变量包含...? – CBroe

+0

在你的代码中,你正在定义'$ nextPageToken = NULL;'。因此,你的条件'if($ nextPageToken)'从来没有工作。您收到的错误也是如此,即提供的pageToken值无效。 –

+0

@Chinmayjain它故意为null,所以它不会进入if语句,因为不会有任何nextPageToken,直到“$ nextPageToken = $ files-> getNextPageToken();”持久性有机污染物。 – chandlerbing

回答

1

我会用Javascript回答你的nextPageToken问题,只要注意逻辑。 我有两个相同的listFile()函数。一个在初始加载时执行,加载页面后,它显示我的100个文件中的前10个。每次点击一个按钮时,另一个执行。

第一个功能显示inital 10文件。

//take note of this variable 
    var nextToken ; 
    function listFiles() { 
    gapi.client.drive.files.list({ 
     'pageSize': 10, 
     'fields': "*" 
    }).then(function(response) { 

      //assign the nextPageToken to a variable to be used later 
      nextToken = response.result.nextPageToken; 
      // do whatever you like here, like display first 10 files in web page 
      // . . . 
     }); 
     } 

二级功能: 这个功能是通过一个名为“下一页”按钮,从11显示后续文件N的点击触发

function gotoNextPage(event) { 
      gapi.client.drive.files.list({ 
      'pageSize': 10, 
      'fields': "*", 
      'pageToken': nextToken 
      }).then(function(response) { 
      //assign new nextPageToken to make sure new files are displayed 
      nextToken = response.result.nextPageToken; 
      //display batch of file results in the web page 
      //. . .   
      }); 
    } 
+0

嘿,我在第二次搜索时出错。令牌问题。得到它,但API说明它是错误的。 – aleXela

+0

设法解决此问题:https://stackoverflow.com/questions/47402545/google-drive-js-api-nextpagetoken-invalid/47402918#47402918 谷歌sux( – aleXela

1

看来,nextPageToken这个会被裁定为无效,除非在初始请求中包含的后续请求中包含完全相同的查询字段(q)。

var files = [] 
var nextToken; 
gapi.client.drive.files.list({ 
    'q': "mimeType='image/jpeg' or mimeType='image/png'", 
    'pageSize': 10, 
    'fields': 'nextPageToken, files(id, name)' 
}).then(function(response) { 
    nextToken = response.result.nextPageToken; 
    files.push(...response.result.files) 
    while (nextToken) { 
     gapi.client.drive.files.list({ 
      'nextPage': nextToken, 
      'q': "mimeType='image/jpeg' or mimeType='image/png'", 
      'pageSize': 10, 
      'fields': 'nextPageToken, files(id, name)' 
     }).then(function(response) { 
      nextToken = response.result.nextPageToken; 
      files.push(...response.result.files) 
     }) 
    } 
}); 
相关问题